Linux

目录

1. Linux 目录结构

2. VI/VIM 编辑器

2.1 是什么

2.2 一般模式

2.3 编辑模式

2.3.1 进入编辑模式

2.3.2 退出编辑模式

2.4 指令模式

2.5 模式间转换

3. 网络配置和系统管理操作

3.1 查看网络 IP 和网关

3.2 配置网络 ip 地址

3.2.1 ifconfig 配置网络接口

3.2.2 ping 测试主机之间网络连通性

3.2.3 修改 IP 地址

3.2.4 修改 IP 地址后可能会遇到的问题

3.3 配置主机名

3.3.1 修改主机名称

3.3.2 修改 hosts 映射文件

3.4 远程登录

4. 系统管理

4.1 Linux 中的进程和服务

4.2 service 服务管理 (CentOS6 版本-了解)

4.3 chkconfig 设置后台服务的自启配置 (CentOS6 版本)

4.4 systemctl (CentOS 7版本-重点掌握)

4.5 systemctl 设置后台服务的自启配置

4.6 系统运行级别

4.7 关闭防火墙

4.8 关机重启命令

5. 常用基本命令 (重要)

5.1 帮助命令

5.1.1 man 获得帮助信息

5.1.2 help 获得 shell 内置命令的帮助信息

5.1.3 常用快捷键

 5.2 文件目录类

5.2.1 pwd 显示当前工作目录的绝对路径

5.2.2 ls 列出目录的内容

5.2.3 cd切换目录

5.2.4 mkdir 创建一个新的目录

5.2.5 rmdir 删除一个空的目录

5.2.6 touch 创建空文件

5.2.7 cp 复制文件或目录

5.2.8 rm 删除文件或目录

5.2.9 mv 移动文件与目录或重命名

5.2.10 cat 查看文件内容

5.2.11 more 文件内容分屏查看器

5.2.12 less 分屏显示文件内容

5.2.13 echo

5.2.14 head 显示文件头部内容

5.2.15 tail 输出文件尾部内容

5.2.16 > 输出重定向和 >> 追加

 5.2.17 ln 软链接

5.2.18 history 查看已经执行过历史命令

5.3 时间日期类

5.3.1 date 显示当前时间

5.3.2 date 显示非当前时间

5.3.3 date 设置系统时间

5.3.4 cal 查看日历

5.4 用户管理命令

5.4.1 useradd 添加新用户

5.4.2 passwd 设置用户密码

5.4.3 id 查看用户是否存在

5.4.4 cat /etc/passwd 查看创建了哪些用户

5.4.5 su 切换用户

5.4.6 userdel 删除用户

5.4.7 who 查看登录用户信息

5.4.8 sudo 设置普通用户具有 root 权限

5.4.9 usermod 修改用户

5.5 用户组管理命令

5.5.1 groupadd 新增组

5.5.2 groupdel 删除组

5.5.3 groupmod 修改组

5.5.4 cat /etc/group 查看创建了哪些组

5.6 文件权限类

5.6.1 文件属性

5.6.2 chmod 改变权限

5.6.3 chown 改变所有者

5.6.4 chgrp 改变所属组

5.7 搜索查找类

5.7.1 find 查找文件或者目录

5.7.2 locate 快速定位文件路径

5.7.3 grep 过滤查找及 "|" 管道符

5.8 压缩和解压类

5.8.1 gzip / gunzip 压缩

5.8.2 zip / unzip 压缩

5.8.3 tar 打包

5.9 磁盘查看和分区类

5.9.1 du 查看文件和目录占用的磁盘空间

5.9.2 df 查看磁盘空间使用情况

5.9.3 lsblk 查看设备挂载情况

5.9.4 fdisk 分区

5.9.5 mkfs 格式化

5.9.6 mount/umount 挂载/卸载

5.9.7 挂载新的硬盘

5.9.8 挂载持有系统镜像光驱

5.10 进程管理类

5.10.1 ps 查看当前系统进程状态

5.10.2 kill 终止进程

5.10.3 pstree 查看进程树

5.10.4 top 实时监控系统进程状态

5.10.5 netstat 显示网络状态和端口占用信息

5.11 crontab 系统定时任务

5.11.1 crontab 服务管理

6. 软件包管理

6.1 RPM

6.1.1 RPM 概述

6.1.2 RPM 查询命令 (rpm -qa)

6.1.3 RPM 卸载命令 (rpm -e)

6.1.4 RPM 安装命令 (rpm -ivh)

6.2 YUM 仓库配置

6.2.1 YUM 概述

6.2.2 YUM 的常用命令

6.2.3 修改网络 YUM 源

7. 克隆虚拟机

7.1 克隆

7.2 开机修改系统相关配置

8. Shell 编程

8.1 Shell 概述

8.2 Shell 脚本入门

8.3 变量

8.3.1 系统预定义变量

8.3.2 自定义变量

8.4 特殊变量

8.4.1 $n

8.4.2 $#

8.4.3 $*、¥@

8.4.4 $?

8.5 运算符

8.6 条件判断

8.7 流程控制 (重点)

8.7.1 if 判断

8.7.2 case 语句

8.7.3 for 循环

8.7.4 while 循环

8.7.5 跳出循环

8.8 read 读取控制台输入

8.9 函数

8.9.1 系统函数-basename

8.9.2 系统函数-dirname

8.9.3 自定义函数

8.10 数组

8.11 字符串

8.12 加载其他文件的变量

9. 正则表达式入门

9.1 常规匹配

9.2 常用特殊字符

9.2.1 特殊字符: ^

9.2.2 特殊字符: $

9.2.3 特殊字符: .

9.2.4 特殊字符: *

9.2.5 字符区间 [ ]

9.2.6 特殊字符: \

10. 文本处理工具

10.1 cut

10.2 awk

10.3 sort

10.4 wc

10.5 uniq

10.6 tee

10.7 tr

10.8 split

10.9 sed


哔哩哔哩视频链接: 3天搞定Linux,1天搞定Shell,清华学神带你通关(2022版)_哔哩哔哩_bilibili

1. Linux 目录结构

Linux_第1张图片

  •  /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 内核的一个很大的变化, 该目录安装了 2.6 内核中新出现的一个文件系统 sysfs
  • /tmp
    • 这个目录是用来存放一些临时文件的
  • /dev
    • 类似于 windows 的设备管理器, 把所有硬件用文件的形式存储
  • /media(CentOS6)
    • linux 系统会自动识别一些设备, 例如 U盘、光驱等等, 当识别后, linux 会把识别的设备挂载到这个目录下
    • CentOS7 迁移到 /run/media
  • /mnt
    • 系统提供该目录是为了让用户临时挂载别的文件系统的, 我们可以将外部的存储挂载在 /mnt/ 上, 然后进入该目录就可以查看里面的内容了
  • /opt
    • 这是给主机额外安装软件所摆放的目录, 比如你安装了一个 mysql 数据库则就可以放到这个目录下, 默认是空的
  • /var
    • 这个目录中存放着不断扩充着的东西, 我们习惯将那些经常被修改的目录放在这个目录下, 包括各种日志文件

2. VI/VIM 编辑器

2.1 是什么

  1. VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器
  2. VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性, 方便程序设计。VIM 与 VI 编辑器完全兼容

2.2 一般模式

以 vi 打开一个档案就直接进入一般模式了 (这是默认的模式)。在这个模式中, 你可以使用 [上下左右] 按键来移动光标, 你可以使用 [删除字符] 或 [删除整行] 来处理档案内容, 也可以使用 [复制、粘贴] 来处理你的文件数据

语法 功能描述
yy 复制光标当前一行
y 数字 y 复制一段 (从第几行到第几行)
p 箭头移动到目的行粘贴
u 撤销上一步
ctrl + r 恢复上一步被撤销的操作
dd 删除光标当前行
d 数字 d 删除光标 (含) 后多少行
x 剪切一个字母, 相当于 del
X 剪切一个字母, 相当于 Backspace
yw 复制一个词
dw 删除一个词
^ 移动到行头
$ 移动到行尾
w 移动到下一个词 (词头位置)
e 移动到当前词尾
b 移动到上一个词的词头
1+G 移动到页头, 数字
G 移动到页尾
数字 N+G 移动到目标行

Linux_第2张图片

2.3 编辑模式

        在一般模式中可以进行删除、复制、粘贴等动作, 但是却无法编辑文件内容的! 要等你按下 [i, I, o, O, a, A] 等任何一个字母之后才会进入编辑模式

        注意了! 通常在 Linux 中, 按下这些按键时, 在画面左下方会出现 [INSERT 或 REPLACE] 的字样, 此时才可以进行编辑。而如果要回到一般模式, 则必须要按下 [Esc] 这个按键即可退出编辑模式

2.3.1 进入编辑模式

按键 功能
i 当前光标前

a

当前光标后
o 当前光标行的下一行
I 光标所在行最前
A 光标所在行最后
O 当前光标行的上一行

2.3.2 退出编辑模式

按 [Esc] 键退出编辑模式, 之后所在的模式为一般模式

2.4 指令模式

        在一般模式当中, 输入 [: / ?] 3个中的任何一个按钮, 就可以将光标移动到最底下哪一行

        在这个模式当中, 可以提供你 [搜寻资料] 的动作, 而读取、存盘、大量取代字符、离开vi、显示行号等动作是在此模式中达成的!

基本语法

命令 功能
:w 保存
:q 退出
:! 强制执行
:wq! 强制保存退出
/要查找的词 n 查找下一个, N 往上查找
:noh 取消高亮显示
:set nu 显示行号
:set nonu 关闭行号
:s/old/new 替换当前行匹配到的第一个 old 为 new
:s/old/new/g 替换当前行匹配到的所有 old 为 new
:%s/old/new 替换文档中每一行匹配到的第一个 old 为 new
:%s/old/new/g 替换文档中匹配到的所有 old 为 new

2.5 模式间转换

Linux_第3张图片

3. 网络配置和系统管理操作

3.1 查看网络 IP 和网关

1. 查看虚拟网络编辑器

Linux_第4张图片

 2. 修改虚拟网卡 IP

Linux_第5张图片

3. 查看网关

Linux_第6张图片

4. 查看 windows 环境中的 VMnet8 网络配置 

Linux_第7张图片

3.2 配置网络 ip 地址

3.2.1 ifconfig 配置网络接口

ifconfig :network interfaces configuring 网络接口配置

1. 基本语法

        ifconfig        功能描述: 显示所有网络接口

2. 查看当前网络 ip

[root@hadoop100 桌面]# ifconfig

3.2.2 ping 测试主机之间网络连通性

1. 基本语法

        ping 目的主机        功能描述: 测试当前服务器是否可以连接目的主机

2. 测试当前服务器是否可以连接百度

[root@hadoop100 桌面]# ping www.baidu.com

3.2.3 修改 IP 地址

静态 ip

1. 查看 IP 配置文件, 如图所示

[root@hadoop100 桌面]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

Linux_第8张图片

 查看 IP 配置文件

以下标红的项必须修改, 有值的按照下面的值修改, 没有该项的要增加

TYPE="Ethernet" #网络类型(通常是 Ethemet)
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" #IP 的配置方法[none|static|bootp|dhcp](引导
时不 使用协议|静态分配 IP|BOOTP 协议|DHCP 协议)
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="e83804c1-3257-4584-81bb-660665ac22f6" #随机 id
DEVICE="ens33"         #接口名(设备,网卡)
ONBOOT="yes"         #系统启动的时候网络接口是否有效(yes/no)
#IP 地址
IPADDR=192.168.1.100
#网关
GATEWAY=192.168.1.2
#域名解析器
DNS1=192.168.1.2

修改后, 如下图所示

Linux_第9张图片

编辑完后, 按键盘 esc, 然后输入 :wq 回车即可

2. 执行 service network restart 重启网络

Linux_第10张图片

3.2.4 修改 IP 地址后可能会遇到的问题

  1. 物理机能 ping 通虚拟机, 但是虚拟机 ping 不同物理机, 一般都是因为物理机的防火墙问题, 把防火墙关闭就行
  2. 虚拟机能 Ping 通物理机, 但是虚拟机 Ping 不同外网, 一般都是因为 DNS 的设置有问题
  3. 虚拟机 Ping www.baicu.com 显示域名未知等信息, 一般查看 GATEWAY 和 DNS 设置是否正确
  4. 如果以上全部设置完还是不行, 需要关闭 networkManager 服务
    1. systemctl stop NotworkManager        关闭
    2. systemctl disable NetworkManager        禁用
  5. 如果检查发现 systemctl status network 有问题, 需要检查 ifcfg-ens33

3.3 配置主机名

3.3.1 修改主机名称

1. 基本语法

        hostname        功能描述: 查看当前服务器的主机名称

2. 查看当前服务器主机名称

[root@hadoop100 桌面]# hostname

如果感觉此主机名不合适, 我们可以进行修改, 通过编辑 /etc/hostname 文件

[root@hadoop100 桌面]# vim /etc/hostname

修改完成后重启生效

3.3.2 修改 hosts 映射文件

1. 修改 linux 的主机映射文件 (hosts 文件)

后续在 hadoop阶段, 虚拟机会比较多, 配置时通常会采用主机名的方式配置, 比较简单方便, 不用刻意记 ip 地址

(1). 打开 /etc/hosts

[root@hadoop100 桌面]# vim /etc/hosts

        添加如下内容

192.168.2.100 hadoop100
192.168.2.101 hadoop101
192.168.2.102 hadoop102
192.168.2.103 hadoop103
192.168.2.104 hadoop104
192.168.2.105 hadoop105

(2). 重启设备, 重启后, 查看主机名, 已经修改成功

2. 修改 windows 的主机映射文件 (hosts 文件)

(1). 进入 C:\Windows\System32\drivers\etc 路径

(2). 打开 hosts 文件并添加如下内容

192.168.2.100 hadoop100
192.168.2.101 hadoop101
192.168.2.102 hadoop102
192.168.2.103 hadoop103
192.168.2.104 hadoop104
192.168.2.105 hadoop105

(3). 修改 wendow10 的主机映射文件 (hosts 文件)

  1. 进入 C:\Windows\System32\drivers\etc 路径
  2. 拷贝 hosts 文件到桌面
  3. 打开桌面 hosts 文件并添加如下内容
192.168.2.100 hadoop100
192.168.2.101 hadoop101
192.168.2.102 hadoop102
192.168.2.103 hadoop103
192.168.2.104 hadoop104
192.168.2.105 hadoop105

(4). 将桌面 hosts 文件覆盖 C:\Windows\System32\drivers\etc 路径 hosts 文件

3.4 远程登录

        通常在工作过程中, 公司中使用的真实服务器或者是云服务器, 都不允许运维人员之外的员工直接接触, 因此就需要通过远程登录的方式来操作。所以, 远程登录工具就是必不可缺的, 目前, 比较主流得有 Xshell, SSH Secure Shell, SecureCRT, FinalShell 等

4. 系统管理

4.1 Linux 中的进程和服务

计算机中, 一个正在执行的程序或命令, 被叫做 "进程" (process)

启动之后一直存在、常驻内存的进程, 一般被称作 "服务" (service)

4.2 service 服务管理 (CentOS6 版本-了解)

1. 基本语法

        service 服务名 start | stop | restart | status

2. 经验技巧

        查看服务的方法: /etc/init.d/服务名, 发现只有两个服务保留在 service

[root@hadoop100 init.d]# pwd
/etc/init.d
[root@hadoop100 init.d]# ls -al
drwxr-xr-x. 2 root root 4096 3 月 19 15:24 .
drwxr-xr-x. 10 root root 4096 3 月 19 15:24 ..
-rw-r--r--. 1 root root 18104 1 月 3 2018 functions
-rwxr-xr-x. 1 root root 4334 1 月 3 2018 netconsole
-rwxr-xr-x. 1 root root 7293 1 月 3 2018 network
-rw-r--r--. 1 root root 1160 4 

3. 案例实操

(1). 查看网络服务的状态

[root@hadoop100 桌面]#service network status

(2). 停止网络服务

[root@hadoop100 桌面]#service network stop

(3). 启动网络服务

[root@hadoop100 桌面]#service network start

(4). 重启网络服务

[root@hadoop100 桌面]#service network restart

4.3 chkconfig 设置后台服务的自启配置 (CentOS6 版本)

1. 基本语法

chkconfig                        功能描述: 查看所有服务器自启配置

chkconfig 服务名 off        功能描述: 关掉指定服务的自动启动

chkconfig 服务名 on        功能描述: 开启指定服务的自动启动

chkconfig 服务名 --list      功能描述: 查看服务开机启动状态

2. 案例实操

(1). 开启/关闭 network (网络) 服务的自动启动

[root@hadoop100 桌面]#chkconfig network on
[root@hadoop100 桌面]#chkconfig network off

(2). 开启/关闭 network 服务指定级别的自动启动

[root@hadoop100 桌面]#chkconfig --level 指定级别 network on
[root@hadoop100 桌面]#chkconfig --level 指定级别 network off

4.4 systemctl (CentOS 7版本-重点掌握)

1. 基本语法

systemctl start | stop | restart | status        服务名

2. 经验技巧

查看服务的方法: /usr/lib/systemd/system

[root@hadoop100 system]# pwd
/usr/lib/systemd/system
[root@hadoop100 init.d]# ls -al
-rw-r--r--. 1 root root 275 4 月 27 2018 abrt-ccpp.service
-rw-r--r--. 1 root root 380 4 月 27 2018 abrtd.service
-rw-r--r--. 1 root root 361 4 月 27 2018 abrt-oops.service
-rw-r--r--. 1 root root 266 4 月 27 2018 abrt-pstoreoops.service
-rw-r--r--. 1 root root 262 4 月 27 2018 abrt-vmcore.service
-rw-r--r--. 1 root root 311 4 月 27 2018 abrt-xorg.service
-rw-r--r--. 1 root root 751 4 月 11 2018 accounts-daemon.service
-rw-r--r--. 1 root root 527 3 月 25 2017 alsa-restore.service
-rw-r--r--. 1 root root 486 3 月 25 2017 alsa-state.service

3. 案例实操

(1). 查看防火墙服务的状态

[root@hadoop100 桌面]# systemctl status firewalld

(2). 停止防火墙服务

[root@hadoop100 桌面]# systemctl stop firewalld

(3). 启动防火墙服务

[root@hadoop100 桌面]# systemctl start firewalld

(4). 重启防火墙服务

[root@hadoop100 桌面]# systemctl restart firewalld

4.5 systemctl 设置后台服务的自启配置

1. 基本语法

systemctl list-unit-files        功能描述: 查看服务开启启动状态

systemctl disable service_name        功能描述: 关掉指定服务的自动启动

systemctl enable service_name        功能描述: 开启指定服务的自动启动

2. 案例实操

(1). 开启/关闭 iptables (防火墙) 服务的自动启动

[root@hadoop100 桌面]# systemctl enable firewalld.service
[root@hadoop100 桌面]# systemctl disable firewalld.service

4.6 系统运行级别

1. Linux 运行级别 [CentOS 6]

Linux_第11张图片

 2. CentOS7 的运行级别简化为

        multi-user.target        等价于原运行级别 3 (多用户有网, 无图形界面)

        graphical.target         等价于原运行级别 5 (多用户有网, 有图形界面)

3. 查看当前运行级别

        systemctl get-default

4. 修改当前运行级别

        systemctl set-default TARGET.target        (这里 TARGET 取 multi-user 或者 graphical)

4.7 关闭防火墙

1. 临时关闭防火墙

        (1). 查看防火墙状态

[root@hadoop100 桌面]# systemctl status firewalld

        (2). 临时关闭防火墙

[root@hadoop100 桌面]# systemctl stop firewalld

2. 开机启动时关闭防火墙

        (1). 查看防火墙开机启动状态

[root@hadoop100 桌面]# systemctl enable firewalld.service

        (2). 设置开机时关闭防火墙

[root@hadoop100 桌面]# systemctl disable firewalld.service

4.8 关机重启命令

在 linux 领域内大多用在服务器上, 很少遇到关机的操作, 毕竟服务器上跑一个服务是永无止境的, 除非特殊情况下, 不得已才会关机

1. 基本语法

(1). sync                功能描述: 将数据由内存同步到硬盘中

(2). halt                  功能描述: 停机, 关闭系统, 但不断电

(3). poweroff          功能描述: 关机, 断电

(4). shutdown [选项] 时间

选项 功能
-h 相当于 --halt, 停机
-r -r=reboot 重启

参数 功能
now 立刻关机
时间 等待多久后关机 (时间单位是分钟)

2. 经验技巧

        Linux 系统中为了提高磁盘的读写效率, 对磁盘采取了 "预读迟写" 操作方式, 当用户保存文件时, Linux 核心并不一定立即将保存数据写入物理磁盘中, 而是将数据保存在缓冲区中, 等缓冲区满时再写入磁盘, 这种方式可以极大地提高磁盘写入数据的效率, 但是, 也带来了安全隐患, 如果数据还未写入磁盘时, 系统掉电或者其他严重问题出现, 则将导致数据丢失, 使用 sync 指令可以立即将缓冲区的数据写入磁盘

3. 案例实操

        (1). 将数据由内存同步到硬盘中

[root@hadoop100 桌面]# sync

        (2). 重启

[root@hadoop100 桌面]# reboot

        (3). 停机 (不断电)

[root@hadoop100 桌面]# halt

        (4). 计算机将在 1 分钟后关机, 并且会显示在登录用户的当前屏幕中

[root@hadoop100 桌面]# shutdown -h 1 
‘This server will shutdown after 1 mins’

        (5). 在指定时间关机

[root@hadoop100 ~]# shutdown -h 23:37

        (6). 立马关机 (等同于 poweroff)

[root@hadoop100 桌面]# shutdown -h now

        (7). 系统立马重启 (等同于 reboot)

[root@hadoop100 桌面]# shutdown -r now

5. 常用基本命令 (重要)

        Shell 可以看作是一个命令解释器, 为我们提供了交互式的文本控制台界面, 我们可以通过终端控制台来输入命令, 由 shell 进行解释并最终交给内核执行, 本章就将分类介绍常用的基本 shell 命令

5.1 帮助命令

5.1.1 man 获得帮助信息

(1). 基本语法

        man [命令或配置文件]        功能描述: 获得帮助信息

(2). 显示说明

信息 功能
NAME 命令的名称和单行描述
SYNOPSIS 怎样使用命令
DESCRIPTION 命令功能的深入讨论
EXAMPLES 怎样使用命令的例子
SEE ALSO 相关主题 (通常是手册页)

(3). 案例实操

        (1). 查看 ls 命令的帮助信息

[root@hadoop101 ~]# man ls

5.1.2 help 获得 shell 内置命令的帮助信息

        一部分基础功能的系统命令是直接内嵌在 shell 中的, 系统加载启动之后会随着 shell 一起加载, 常驻系统内存中, 这部分命令被称为 "内置 (built-in) 命令" , 相应的其他命令被称为 "外部命令"

1. 基本语法

        help 命令        功能描述: 获得shell 内置命令的帮助信息

2. 案例实操

        (1). 查看 cd 命令的帮助信息

[root@hadoop101 ~]# help cd

5.1.3 常用快捷键

常用快捷键 功能
ctrl + c 停止进程
ctrl + l 清屏, 等同于 clear, 彻底清屏是: reset
善于用 tab 键 提示 (更重要的是可以防止敲错)
上下键 查找执行过的命令

 5.2 文件目录类

5.2.1 pwd 显示当前工作目录的绝对路径

pwd:print working directory 打印工作目录

1. 基本语法

        pwd        功能描述: 显示当前工作目录的绝对路径

2. 案例实操

        (1). 显示当前工作目录的绝对路径

[root@hadoop101 ~]# pwd
/root

5.2.2 ls 列出目录的内容

ls:list 列出目录内容

1. 基本语法

        ls [选项] 目录或是文件

2. 选项说明

选项 功能
-a 全部的文件, 连同隐藏档 (开头为.的文件) 一起列出来 (常用)
-l 长数据串列出, 包含文件的属性与权限等等数据: (常用) 等价于 "ll"
-h 更加人性化的打印文件的尺寸大小 (显示单位), 需要和  -l 一起使用

3. 显示说明

        每行列出的信息依次是: 文件类型与权限 链接数 文件属主 文件属组 文件大小用byte来表示 建立或最近修改的时间 名字

4. 案例实操

        (1). 查看当前目录的所有内容信息

[root@hadoop100 ~]# ls -al
总用量 132
dr-xr-x---. 15 root root  4096 8月  23 00:17 .
dr-xr-xr-x. 17 root root   233 8月  22 00:34 ..
-rw-------.  1 root root  1845 8月  21 23:19 anaconda-ks.cfg
-rw-------.  1 root root  1701 8月  22 23:37 .bash_history
-rw-r--r--.  1 root root    18 12月 29 2013 .bash_logout
-rw-r--r--.  1 root root   176 12月 29 2013 .bash_profile
-rw-r--r--.  1 root root   176 12月 29 2013 .bashrc
drwx------. 18 root root  4096 8月  22 12:16 .cache
drwxr-xr-x. 16 root root  4096 8月  22 01:29 .config
-rw-r--r--.  1 root root   100 12月 29 2013 .cshrc
drwx------.  3 root root    25 8月  21 23:23 .dbus
-rw-------.  1 root root    16 8月  21 23:26 .esd_auth
-rw-------.  1 root root  3720 8月  22 23:43 .ICEauthority
-rw-r--r--.  1 root root  1674 8月  22 11:51 initial-setup-ks.cfg
-rw-r--r--.  1 root root 12288 8月  22 12:07 .initial-setup-ks.cfg.swn
-rw-r--r--.  1 root root 12288 8月  22 12:07 .initial-setup-ks.cfg.swo
-rw-r--r--.  1 root root 12288 8月  22 12:02 .initial-setup-ks.cfg.swp
drwx------.  3 root root    19 8月  21 23:26 .local
drwx------.  5 root root    66 8月  21 23:28 .mozilla
-rw-r--r--.  1 root root  1819 8月  22 00:43 profile
-rw-r--r--.  1 root root   129 12月 29 2013 .tcshrc
-rw-r--r--.  1 root root     0 8月  22 01:51 te
-rw-r--r--.  1 root root  1841 8月  22 01:41 temp.cfg
-rw-r--r--.  1 root root 12288 8月  22 01:58 .temp.cfg.swo
-rw-r--r--.  1 root root 12288 8月  22 01:50 .temp.cfg.swp
-rw-------.  1 root root  5163 8月  22 19:02 .viminfo
-rw-------.  1 root root   161 8月  23 00:17 .Xauthority
drwxr-xr-x.  2 root root     6 8月  21 23:26 公共
drwxr-xr-x.  2 root root     6 8月  21 23:26 模板
drwxr-xr-x.  2 root root     6 8月  21 23:26 视频
drwxr-xr-x.  2 root root     6 8月  21 23:26 图片
drwxr-xr-x.  2 root root     6 8月  21 23:26 文档
drwxr-xr-x.  2 root root     6 8月  21 23:26 下载
drwxr-xr-x.  2 root root     6 8月  21 23:26 音乐
drwxr-xr-x.  2 root root    22 8月  22 01:49 桌面
[root@hadoop100 ~]# 

5.2.3 cd切换目录

cd:Change Directory 切换目录

1. 基本语法

        cd [参数]

2. 参数说明

参数 功能
cd 绝对路径 切换路径
cd 相对路径 切换路径
cd ~ 或者 cd 回到自己的家目录
cd - 回到上一次所在目录
cd .. 回到当前目录的上一级目录
cd -P 跳转到实际物理路径, 而非快捷方式路径

3. 案例实操

        (1). 使用绝对路径切换到 root 目录

[root@hadoop101 ~]# cd /root/

        (2). 使用相对路径切换到 "公共" 目录

[root@hadoop101 ~]# cd 公共/

        (3). 表示回到自己的家目录, 亦既是 /root 这个目录

[root@hadoop101 公共]# cd ~

        (4). cd - 回到上一次所在目录

[root@hadoop101 ~]# cd -

        (5). 表示回到当前目录的上一级目录, 亦既是 "/root/公共的" 的上一级目录的意思

[root@hadoop101 公共的]# cd ..

5.2.4 mkdir 创建一个新的目录

mkdir: Make directory 建立目录

1. 基本语法

        mkdir [选项] 要创建的目录

2. 选项说明

选项 功能
-p 创建多层目录

3. 案例实操

        (1). 创建一个目录

[root@hadoop101 ~]# mkdir xiyou
[root@hadoop101 ~]# mkdir xiyou/mingjie

        (2). 创建一个多级目录

[root@hadoop101 ~]# mkdir -p xiyou/dssz/meihouwang

5.2.5 rmdir 删除一个空的目录

        rmdir: Remove directory 移除目录

1. 基本语法

        rmdir [选项] 要删除的空目录

2. 选项

选项 功能
-p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除

    

3. 案例实操

        (1). 删除一个空的文件夹

[root@hadoop101 ~]# rmdir xiyou/dssz/meihouwang

      

5.2.6 touch 创建空文件

1. 基本语法

        touch 文件名称

2. 案例实操

[root@hadoop101 ~]# touch xiyou/dssz/sunwukong.txt

5.2.7 cp 复制文件或目录

1. 基本语法

        cp [选项] source dest        功能描述: 复制 source 文件到 dest

2. 选项说明

选项 功能
-r 递归复制整个文件夹

3. 参数说明

参数 功能
source 源文件
dest 目标文件

4. 经验技巧

        强制覆盖不提示的方法: \cp

5. 案例实操

        (1). 复制文件

[root@hadoop101 ~]# cp xiyou/dssz/suwukong.txt xiyou/mingjie/

        (2). 递归复制整个文件夹

[root@hadoop101 ~]# cp -r xiyou/dssz/ ./

5.2.8 rm 删除文件或目录

1. 基本语法

        rm [选项] deleteFile        功能描述: 递归删除目录中所有内容

2. 选项说明

选项 功能
-r 递归删除目录中所有内容
-f 强制执行删除操作, 而不提示用于确认
-v 显示指令的详细执行过程

3. 案例实操

        (1). 删除目录中的内容

[root@hadoop101 ~]# rm xiyou/mingjie/sunwukong.txt

        (2). 递归删除目录中的内容

[root@hadoop101 ~]# rm -rf dssz/

5.2.9 mv 移动文件与目录或重命名

1. 基本语法

        (1). mv oldNameFile newNameFile        功能描述: 重命名

        (2). mv /temp/movefile /targetFolder       功能描述: 移动文件

2. 案例实操

        (1). 重命名

[root@hadoop101 ~]# mv xiyou/dssz/suwukong.txt xiyou/dssz/houge.txt

        (2). 移动文件

[root@hadoop101 ~]# mv xiyou/dssz/houge.txt ./

5.2.10 cat 查看文件内容

        查看文件内容, 从第一行开始显示

1. 基本语法

        cat [选项] 要查看的文件

2. 选项说明 

选项 功能描述
-n 显示所有行的行号, 包括空行

3. 经验技巧

        一般查看比较小的文件, 一屏幕能显示全的

4. 实操案例

        (1). 查看文件内容并显示行号

[atguigu@hadoop101 ~]$ cat -n houge.txt

5.2.11 more 文件内容分屏查看器

        more 指令是一个基于 VI编辑器的文本过滤器, 它以全屏幕的方式按页显示文本文件的内容, more 指令中内置了若干快捷键, 详见操作说明

1. 基本语法

        more 要查看的文件

2. 操作说明

操作 功能说明
空白键 (space) 代表向下翻一页
Enter 代表向下翻 [一行]

q

代表立刻离开 more, 不再显示该文件内容
Ctrl + F 向下滚动一屏
Ctrl + B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号

3. 案例实操

        (1). 采用 more 查看文件

[root@hadoop101 ~]# more smartd.conf

5.2.12 less 分屏显示文件内容

        less 指令用来分屏查看文件内容, 他的功能与 more 指令类似, 但是比 more 指令更加强大, 支持各种显示终端, less 指令在显示文件内容时, 并不是一次将整个文件加载之后才显示, 而是根据显示需要加载内容, 对于显示大型文件具有较高的效率

1. 基本语法

        less 要查看的文件

2. 操作说明

操作 功能说明
空白键 向下翻动一页
b 向上翻动一页
[pagedown] 向下翻动一页
[pageup] 向上翻动一页
/字串 向下搜寻 [字串] 的功能; n: 向下查找; N: 向上查找
?字串 向上搜寻 [字串] 的功能; n: 向上查找; N: 向下查找

q

离开 less 这个程序

3. 经验技巧

        用 SecureCRT 时 [pagedown] 和 [pageup] 可能会出现无法识别的问题

4. 案例实操

        (1). 采用 less 查看文件

[root@hadoop101 ~]# less smartd.conf

5.2.13 echo

        echo 输出内容到控制台

1. 基本语法

        echo [选项] [输出内容]

        选项:

        -e:        支持反斜线控制的字符转换

        -n:        不换行输出

控制字符 作用
\\ 输出 \ 本身
\n 换行符
\t 制表符, 也就是 Tab 键

2. 案例实操

[atguigu@hadoop101 ~]$ echo “hello\tworld”
hello\tworld
[atguigu@hadoop101 ~]$ echo -e “hello\tworld”
hello world

5.2.14 head 显示文件头部内容

head 用于显示文件的开头部分内容, 默认情况下 head 指令显示文件的前 10 行内容

1. 基本语法

        head 文件               功能描述: 查看文件头 10 行内容

        head -n 5 文件        功能描述: 查看文件头 5 行内容, 5 可以是任意行数

2. 选项说明

选项 功能
-n<行数> 指定显示头部内容的行数

3. 案例实操

        (1). 查看文件的头 2 行

[root@hadoop101 ~]# head -n 2 smartd.conf

5.2.15 tail 输出文件尾部内容

        tail 用于输出文件中尾部的内容, 默认情况下 tail 指令显示文件的后 10 行内容

1. 基本语法

        (1). tail 文件               功能描述: 查看文件尾部 10 行内容

        (2). tail -n 5 文件        功能描述: 查看文件尾部 5 行内容, 5 可以是任意行数

        (3). tail -f 文件            功能描述: 实时追踪该文档的所有更新

2. 选项说明

选项 功能
-n<行数> 输出文件尾部 n 行内容
-f 显示文件最新追加的内容, 监视文件变化

3. 案例实操

        (1). 查看文件尾 1 行内容

[root@hadoop101 ~]# tail -n 1 smartd.conf

        (2). 实时追踪该档的所有更新

[root@hadoop101 ~]# tail -f houge.txt

5.2.16 > 输出重定向和 >> 追加

1. 基本语法

        (1) ls -l > 文件                   功能描述: 列表的内容写入文件 a.txt 中 (覆盖写)

        (2) ls -al >> 文件               功能描述: 列表的内容追加到文件 aa.txt 的末尾

        (3) cat 文件1 > 文件2        功能描述: 将文件1的内容覆盖到文件2

        (4) echo "内容" >> 文件     功能描述: 将内容追加到文件中

2. 案例实操

        (1). 将 ls 查看信息写入到文件中

[root@hadoop101 ~]# ls -l>houge.txt

        (2). 将 ls 查看信息追加到文件中

[root@hadoop101 ~]# ls -l>>houge.txt

        (3). 采用 echo 将 hello 单词追加到文件中

[root@hadoop101 ~]# echo hello>>houge.txt

 5.2.17 ln 软链接

        软链接也称为符号链接, 类似于 windows 里的快捷方式, 有自己的数据块, 主要存放了链接其他文件的路径

1. 基本语法

        ln -s [原文件或目录] [软链接名]        功能描述: 给原文件创建一个软链接

2. 经验技巧

        删除软链接: rm -rf 软链接名, 而不是 rm -rf 软链接名/

        如果使用 rm -rf 软链接名/ 删除, 会把软链接对应的真实目录下的内容删掉

        查询: 通过 ll 就可以看到, 列表属性第 1 为 l, 尾部会有位置指向

3. 案例实操

        (1). 创建软链接

[root@hadoop101 ~]# mv houge.txt xiyou/dssz/
[root@hadoop101 ~]# ln -s xiyou/dssz/houge.txt ./houzi
[root@hadoop101 ~]# ll
lrwxrwxrwx. 1 root root 20 6 月 17 12:56 houzi ->
xiyou/dssz/houge.txt

        (2). 删除软链接 (注意不要写最后的/)

[root@hadoop101 ~]# rm -rf houzi

        (3). 进入软链接时机物理路径

[root@hadoop101 ~]# ln -s xiyou/dssz/ ./dssz
[root@hadoop101 ~]# cd -P dssz/

5.2.18 history 查看已经执行过历史命令

1. 基本语法

        history        功能描述: 查看已经执行过的历史命令

2. 案例实操

        (1). 查看已经执行过的历史命令

[root@hadoop101 test1]# history

        (2). 根据编号执行命令

  430  history
[root@hadoop100 ~]# !430

        (3). 显示最新输入的 n 条命令

[root@hadoop100 ~]# history 10

        (4). 清空记录

[root@hadoop100 ~]# history -c

5.3 时间日期类

1. 基本语法

        date [OPTION]... [+FORMAT]

2. 选项说明

选项 功能
-d<时间字符串> 显示指定的 "时间字符串" 表示的时间, 而非当前时间
-s<日期时间> 设置系统日期时间

3. 参数说明

参数 功能
<+日期时间格式> 指定显示时使用的日期时间格式

5.3.1 date 显示当前时间

1. 基本语法

        date                功能描述: 显示当前时间

        date +%Y        功能描述: 显示当前年份

        date +%m       功能描述: 显示当前月份

        date +%d         功能描述: 显示当前是哪一天

        date +%F         功能描述, 直接显示年月日, 相当于 date +%Y-%m-%d

        date "+%Y-%m-%d%H:%M:%S"        功能描述: 显示年月日时分秒

2. 案例实操

        (1). 显示当前时间信息

        2022年 08月 24日 星期三 01:33:27 CST

[root@hadoop101 ~]# date

        (2). 显示当前时间 年月日

        20220824

[root@hadoop101 ~]# date +%Y%m%d

        (3). 显示当前时间 年月日时分秒

        2022-08-24 01:35:00

[root@hadoop101 ~]# date "+%Y-%m-%d %H:%M:%S"

5.3.2 date 显示非当前时间

1. 基本语法

        date -d '1 days ago'         功能描述: 显示前一天时间

        date -d '-1 days ago'        功能描述: 显示明天时间

        date -d '1 hours ago'        功能描述: 显示前一小时的时间

        date -d '-1 hours ago'        功能描述: 显示后一小时的时间

2. 案例实操

        (1). 显示前一天

        2022年 08月 23日 星期二 20:36:40 CST

[root@hadoop101 ~]# date -d '1 days ago'

        (2). 显示明天时间

        2022年 08月 25日 星期四 01:38:04 CST

[root@hadoop101 ~]#date -d '-1 days ago'

        (3). 显示前一小时时间

        2022年 08月 24日 星期三 01:17:59 CST

[root@hadoop100 ~]# date -d '1 hours ago'

        (4). 显示后一小时时间

        2022年 08月 24日 星期三 03:18:24 CST

[root@hadoop100 ~]# date -d '-1 hours ago'

5.3.3 date 设置系统时间

1. 基本语法

        date -s 字符串时间

2. 案例实操

        (1). 设置系统当前时间

[root@hadoop101 ~]# date -s "2017-06-19 20:52:18"

5.3.4 cal 查看日历

1. 基本语法

        cal [选项]        功能描述: 不加选项, 显示本月日历

2. 选项说明

选项 功能
具体某一年 显示这一年的日历
-1 只显示当前月份 (默认)
-3 显示上个月、当月和下个月
-s 周日作为一周的第一天
-m 周一作为一周的第一天
-j 输出儒略日
-y 输出整年

3. 案例实操

        (1). 查看当前月的日历

[root@hadoop101 ~]# cal

        (2). 查看 2017 的日历

[root@hadoop101 ~]# cal 2017

5.4 用户管理命令

5.4.1 useradd 添加新用户

1. 基本语法

        useradd 用户名                    功能描述: 添加新用户

        useradd -g 组名 用户名        功能描述: 添加新用户到某个组

2. 案例实操

        (2). 添加一个用户

[root@hadoop101 ~]# useradd tangseng
[root@hadoop101 ~]#ll /home/

5.4.2 passwd 设置用户密码

1. 基本语法

        passwd 用户名        功能描述: 设置用户密码

2. 案例实操

        (1). 设置用户的密码

[root@hadoop101 ~]# passwd tangseng

5.4.3 id 查看用户是否存在

1. 基本语法

        id 用户名

2. 案例实操

        (1). 查看用户是否存在

[root@hadoop101 ~]# id tangseng

5.4.4 cat /etc/passwd 查看创建了哪些用户

1. 案例实操

[root@hadoop101 ~]# cat /etc/passwd

5.4.5 su 切换用户

su: swith user 切换用户

1. 基本语法

        su 用户名称          功能描述: 切换用户, 只能获得用户的执行权限, 不能获得环境变量

        su - 用户名称        功能描述: 切换到用户并获得该用户的环境变量及执行权限

2. 案例实操

        (1). 切换用户

[root@hadoop101 ~]# su tangseng
[root@hadoop101 ~]# echo $PATH
/usr/lib64/qt3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/b
in
[root@hadoop101 ~]# exit
[root@hadoop101 ~]# su - tangseng
[root@hadoop101 ~]# echo $PATH
/usr/lib64/qt-
3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/t
angseng/bin

5.4.6 userdel 删除用户

1. 基本语法

        (1). userdel 用户名           功能描述: 删除用户但保存用户主目录

        (2). userdel -r 用户名        功能描述: 用户和用户主目录, 都删除

2. 选项说明

选项 功能
-r 删除用户的同时, 删除与用户相关的所有文件

3. 案例实操

        (1). 删除用户但保存用户主目录

[root@hadoop101 ~]#userdel tangseng
[root@hadoop101 ~]#ll /home/

        (2). 删除用户和用户主目录, 都删除

[root@hadoop101 ~]#useradd zhubajie
[root@hadoop101 ~]#ll /home/
[root@hadoop101 ~]#userdel -r zhubajie
[root@hadoop101 ~]#ll /home/

5.4.7 who 查看登录用户信息

1. 基本语法

        (1). whoami          功能描述: 显示自身用户名称

        (2). who am i        功能描述: 显示登录用户的用户名以及登录时间

2. 案例实操

        (1). 显示自身用户名称

[root@hadoop101 opt]# whoami

        (2). 显示登录用户的用户名

[root@hadoop101 opt]# who am i

5.4.8 sudo 设置普通用户具有 root 权限

1. 添加 atguigu 用户, 并对其设置密码

[root@hadoop101 ~]#useradd atguigu
[root@hadoop101 ~]#passwd atguigu

2. 修改配置文件

[root@hadoop101 ~]#vi /etc/sudoers

         修改 /etc/sudoers 文件, 找到下面一行 (91 行), 在 root 下面添加一行, 如下所示:

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
atguigu ALL=(ALL) ALL

        或者配置成采用 sudo 命令时, 不需要输入密码

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
atguigu ALL=(ALL) NOPASSWD:ALL

        修改完毕, 现在可以用 atguigu 账号登录, 然后用命令 sudo, 即可获得 root 权限进行操作

3. 案例实操

        (1). 用普通用户在 /opt 目录下创建一个文件夹

[atguigu@hadoop101 opt]$ sudo mkdir module
[root@hadoop101 opt]# chown atguigu:atguigu module/

5.4.9 usermod 修改用户

1. 基本语法

        usermod -g 用户组 用户名

2. 选项说明

选项 功能
-g

修改用户的初始登录组, 给定的组必须存在。默认组 id 是 1

3. 案例实操

        (1). 将用户加入到用户组

[root@hadoop101 opt]# usermod -g root zhubajie

5.5 用户组管理命令

        每个用户都有一个用户组, 系统可以对一个用户组中的所有用户进行集中管理, 不同 Linux 系统对用户组的规定有所不同

        如 Linux 下的用户属于与它同名的用户组, 这个用户组在创建用户时同时创建

        用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group 文件的更新

5.5.1 groupadd 新增组

1. 基本语法

        groupadd 组名

2. 案例实操

        (1). 添加一个 xitianqujian 组

[root@hadoop101 opt]#groupadd xitianqujing

5.5.2 groupdel 删除组

1. 基本语法

        groupdel 组名

2. 案例实操

        (1). 删除 xitianqujing 组

[root@hadoop101 opt]# groupdel xitianqujing

5.5.3 groupmod 修改组

1. 基本语法

        groupmod -n 新组名 老组名

2. 选项说明

选项 功能描述
-n<新组名> 指定工作组的新组名

3. 案例实操

        (1). 修改 atguigu 组名称为 atguigu1

[root@hadoop101 ~]#groupadd atguigu
[root@hadoop101 ~]# groupmod -n atguigu1 atguigu

5.5.4 cat /etc/group 查看创建了哪些组

1. 基本操作

[root@hadoop101 atguigu]# cat /etc/group

5.6 文件权限类

5.6.1 文件属性

        Linux 系统是一种典型的多用户系统, 不同的用户处于不同的地位, 拥有不同的权限.。为了保护系统的安全性, Linux 系统对不同的用户访问同一文件 (包括目录文件) 的权限做了不同的规定。在 Linux 中我们可以使用 ll 或者 ls-l 命令来显示一个文件的属性以及文件所属的用户和组。

1. 从左到右的 10 个字符表示

Linux_第12张图片

如果没有权限, 就会出现减号 [ - ] 而已。从左至右用 0-9 这些数字来表示:

(1) . 0 首位表示类型

        在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等

        - 代表文件

        d 代表目录

        l 链接文档 (link file)

(2). 第 1-3 位确定属主 (该文件的所有者) 拥有该文件的权限。---User

(3). 第 4-6 位确定属组 (所有者的同组用户) 拥有该文件的权限, ---Group

(4). 第 7-9 位确定其他用户拥有该文件的权限 ---Other

2. rwx 作用文件和目录下的不同解释

        (1). 作用到文件:

                [ r ] 代表可读 (read): 可以读取, 查看

                [ w ] 代表可写 (write): 可以修改, 但是不代表可以删除该文件, 删除一个文件的前提是对该文件所在的目录有写权限, 才能删除该文件

                [ x ] 代表可执行 (execute): 可以被系统执行

        (2). 作用到目录:

                [ r ] 代表可读 (read): 可以读取, ls 查看目录内容

                [ w ] 代表可写 (write): 可以修改, 目录内创建 + 删除 + 重命名目录

                [ x ] 代表可执行 (execute): 可以进入该目录

3. 案例实操

[root@hadoop101 ~]# ll
总用量 104
-rw-------. 1 root root 1248 1 月 8 17:36 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 1 月 12 14:02 dssz
lrwxrwxrwx. 1 root root 20 1 月 12 14:32 houzi -> xiyou/dssz/houge.txt

文件基本属性介绍

(1). 如果查看到是文件: 链接数指的是硬链接个数

(2). 如果查看的是文件夹: 链接数指的是子文件夹个数

5.6.2 chmod 改变权限

1. 基本语法

Linux_第13张图片

第一种方式变更权限        

        chmod [{ugoa} {+-=} {rwx}] 文件或目录

第二种方式变更权限

        chmod [mode=421] [文件或目录]

2. 经验技巧

        u: 所有者        g: 所有组        o: 其他人        a: 所有人 (u、g、o 的总和)

        r=4 w=2 x=1        rwx=4+2+1=7

3. 案例实操

        (1). 修改文件使其所属主用户具有执行权限

[root@hadoop101 ~]# cp xiyou/dssz/houge.txt ./
[root@hadoop101 ~]# chmod u+x houge.txt

        (2). 修改文件使其所属组用户具有执行权限

[root@hadoop101 ~]# chmod g+x houge.txt

        (3). 修改文件所属主用户执行权限, 使其其他用户具有执行权限

[root@hadoop101 ~]# chmod u-x,o+x houge.txt

        (4). 采用数字的方式, 设置文件所有者、所属组、其他用户都具有可读可写可执行权限

[root@hadoop101 ~]# chmod 777 houge.txt

        (5). 修改整个文件夹里面的所有文件的所有者、所属组、其他用户都具有可读可写可执行权限

[root@hadoop101 ~]# chmod -R 777 xiyou/

5.6.3 chown 改变所有者

1. 基本语法

        chown [选项] [最终用户] [文件或目录]        功能描述: 改变文件或者目录的所有者

2. 选项说明

选项 功能
-R 递归操作

3. 案例实操

        (1). 修改文件所有者

[root@hadoop101 ~]# chown atguigu houge.txt
[root@hadoop101 ~]# ls -al
-rwxrwxrwx. 1 atguigu root 551 5 月 23 13:02 houge.txt

        (2). 递归改变文件所有者和所有组

[root@hadoop101 xiyou]# ll
drwxrwxrwx. 2 root root 4096 9 月 3 21:20 xiyou
[root@hadoop101 xiyou]# chown -R atguigu:atguigu xiyou/
[root@hadoop101 xiyou]# ll
drwxrwxrwx. 2 atguigu atguigu 4096 9 月 3 21:20 xiyou

5.6.4 chgrp 改变所属组

1. 基本语法

        chgrp [最终用户组] [文件或目录]        功能描述: 改变文件或者目录的所属组

2. 案例实操

        (1). 修改文件的所属组

[root@hadoop101 ~]# chgrp root houge.txt
[root@hadoop101 ~]# ls -al
-rwxrwxrwx. 1 atguigu root 551 5 月 23 13:02 houge.txt

5.7 搜索查找类

5.7.1 find 查找文件或者目录

        find 指令将从指定目录向下递归的遍历其各个子目录, 将满足条件的文件显示在终端

1. 基本语法

        find [搜索范围] [选项]

2. 选项说明

选项 功能
-name<查询方式> 按照指定的文件名查找模式查找文件
-user<用户名> 查找属于指定用户名所有文件
-size<文件大小>

按照指定的文件大小查找文件, 单位为:

b        块 (512 字节)

c        字节

w        字 (2 字节)

k        千字节

M        兆字节

G        吉字节

3. 案例实操

        (1). 按文件名: 根据名称查找/目录下的 filename.txt 文件

[root@hadoop101 ~]# find xiyou/ -name "*.txt"

        (2). 按拥有者: 查找 /opt 目录下, 用户名称为 -user 的文件

[root@hadoop101 ~]# find xiyou/ -user atguigu

        (3). 按文件大小: 在 /home 目录下查找大于 200M 的文件 (+n 大于    -n 小于    n 等于)

[root@hadoop101 ~]find /home -size +200M

5.7.2 locate 快速定位文件路径

        locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库快速实现快速定位给定的文件。Locate 指令无需遍历整个文件系统, 查询速度较快。为了保证查询结果的准确度, 管理员必须定期更新 locate 时刻。

1. 基本语法

        locate 搜索文件

2. 经验技巧

        由于 locate 指令基于数据库进行查询, 所以第一次运行前, 必须使用 updatedb 指令创建 locate 数据库

3. 案例实操

        (1). 查询文件夹

[root@hadoop101 ~]# updatedb  // 更新操作
[root@hadoop101 ~]#locate tmp

5.7.3 grep 过滤查找及 "|" 管道符

        管道符, "|", 表示将前一个命令的处理结果输出传递给后面的命令处理

1. 基本语法

        grep 选项 查找内容 源文件

2. 选项说明

选项 功能
-n 显示匹配行及行号
-i 忽略字母大小写

3. 案例实操

        (1). 查找某文件在第几行

[root@hadoop101 ~]# ls | grep -n test

5.8 压缩和解压类

5.8.1 gzip / gunzip 压缩

1. 基本语法

        gzip 文件                 功能描述: 压缩文件, 只能将文件压缩为 *.gz 文件

        gunzip 文件.gz        功能描述: 解压缩文件命令

2. 经验技巧

        (1). 只能压缩文件不能压缩目录

        (2). 不保留原来的文件

        (3). 同时多个文件会产生多个压缩包

3. 案例实操

        (1). gzip 压缩

[root@hadoop101 ~]# ls
test.java
[root@hadoop101 ~]# gzip houge.txt
[root@hadoop101 ~]# ls
houge.txt.gz

        (2). gunzip 解压缩文件

[root@hadoop101 ~]# gunzip houge.txt.gz
[root@hadoop101 ~]# ls
houge.txt

5.8.2 zip / unzip 压缩

1. 基本语法

        zip [选项] XXX.zip 将要压缩的内容        功能描述: 压缩文件和目录的命令

        unzip [选项] XXX.zip                               功能描述: 解压缩文件

2. 选项说明

zip 选项 功能
-r 压缩目录

unzip 选项 功能
-d<目录> 指定解压后文件的存放目录

3. 经验技巧

        zip 压缩命令在 windows/linux 都通用, 可以压缩目录且保留源文件

4. 案例实操

        (1). 压缩 houge.txt 和 bailongma.txt, 压缩后的名称为 mypackage.zip

[root@hadoop101 opt]# touch bailongma.txt
[root@hadoop101 ~]# zip mypackage.zip houge.txt bailongma.txt
adding: houge.txt (stored 0%)
adding: bailongma.txt (stored 0%)
[root@hadoop101 opt]# ls
houge.txt bailongma.txt mypackage.zip

        (2). 解压 mypackage.zip

[root@hadoop101 ~]# unzip mypackage.zip
Archive: houma.zip
extracting: houge.txt
extracting: bailongma.txt
[root@hadoop101 ~]# ls
houge.txt bailongma.txt mypackage.zip

        (3). 解压 mypackage.zip 到指定目录 -d

[root@hadoop101 ~]# unzip mypackage.zip -d /opt
[root@hadoop101 ~]# ls /opt/

5.8.3 tar 打包

1. 基本语法

        tar [选项] XXX.tar.gz 将要打包进去的内容        功能描述: 打包目录, 压缩后的文件格式.tar.gz

2. 选项说明

选项 功能
-c 产生 .tar 打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包 .tar 文件
-C 解压到指定目录

3. 案例实操

        (1). 压缩多个文件

[root@hadoop101 opt]# tar -zcvf houma.tar.gz houge.txt bailongma.txt
houge.txt
bailongma.txt
[root@hadoop101 opt]# ls
houma.tar.gz houge.txt bailongma.txt

         (2). 压缩目录

[root@hadoop101 ~]# tar -zcvf xiyou.tar.gz xiyou/
xiyou/
xiyou/mingjie/
xiyou/dssz/
xiyou/dssz/houge.txt

        (3). 解压到当前目录

[root@hadoop101 ~]# tar -zxvf houma.tar.gz

        (4). 解压到指定目录

[root@hadoop101 ~]# tar -zxvf xiyou.tar.gz -C /opt
[root@hadoop101 ~]# ll /opt/

5.9 磁盘查看和分区类

5.9.1 du 查看文件和目录占用的磁盘空间

        du: disk usage  磁盘占用情况

1. 基本语法

        du 选项 目录/文件        功能描述: 显示目录下每个子目录的磁盘使用情况

2. 选项说明

选项 功能
-h 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示
-a 不仅查看子目录大小, 还要包括文件
-c 显示所有的文件和子目录大小后, 显示总和
-s 只显示总和
--max-depth=n 指定统计子目录的深度为第 n 层

3. 案例实操

        (1). 查看当前用户主目录占用的磁盘空间大小

[root@hadoop101 ~]# du -sh
166M

5.9.2 df 查看磁盘空间使用情况

        df: disk free 空余磁盘

1. 基本语法

        df 选项        功能描述: 列出文件系统的整体磁盘使用量, 检查文件系统的磁盘空间占用情况

2. 选项说明

选项 功能
-h 以人么较易阅读的 GBytes, MBytes, KBytes 等格式自行显示

3. 案例实操

        (1). 查看磁盘使用情况

[root@hadoop101 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 15G 3.5G 11G 26% /
tmpfs 939M 224K 939M 1% /dev/shm
/dev/sda1 190M 39M 142M 22% /boot

5.9.3 lsblk 查看设备挂载情况

1. 基本语法

        lsblk        功能描述: 查看设备挂载情况

2. 选项说明

选项 功能
-f 查看详细的设备挂载情况, 显示文件系统信息

3. 案例实操

        (1). 查看设备挂载情况

Linux_第14张图片

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

5.9.4 fdisk 分区

1. 基本语法

        fdisk -l                        功能描述: 查看磁盘分区详情

        fdisk 硬盘设备名        功能描述: 对新增硬盘进行分区操作

2. 选项说明

选项 功能
-l 显示所有硬盘的分区列表

3. 经验技巧

        该命令必须在 root 用户下才能使用

4. 功能说明

        (1). Linux 分区

                Device: 分区序列

                Boot: 引导

                Start: 从 X 磁柱开始

                End: 到 Y 磁柱结束

                Blocks: 容量

                Id: 分区类型 ID

                System: 分区类型

        (2). 分区操作按键说明

                m: 显示命令列表

                p: 显示当前磁盘分区

                n: 新增分区

                d: 删除分区

                w: 写入分区信息并退出

                q: 不保存分区信息直接退出

5. 案例实操

        (1). 查看系统分区情况

[root@hadoop101 /]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005e654
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 1332 10485760 83 Linux
/dev/sda3 1332 1593 2097152 82 Linux swap / Solaris

5.9.5 mkfs 格式化

1. 基本语法

        mkfs [选项] ext4 /dev/sdb1        功能描述: 格式化指定分区

2. 选项说明

选项 功能
-t 指定文件系统类型

5.9.6 mount/umount 挂载/卸载

        对于 Linux 用户来讲, 不论有几个分区, 分别分给哪一个目录使用, 它总归就是一个根目录、一个独立且唯一的文件结构。

        Linux 中每个分区都是用来组成整个文件系统的一部分, 它在用一种叫做 "挂载" 的处理方法, 它整个文件系统中包含了一整套的文件和目录, 并将一个分区和一个目录联系起来, 要载入的那个分区将使它的存储空间在这个目录下获得。

1. 挂载前准备 (必须要有光盘或者已经连接镜像文件), 如下图

Linux_第15张图片

2. 基本语法

        mount [-t vfstype] [-o options] device dir         功能描述: 挂载设备

        umount 设备文件名或挂载点                           功能描述: 卸载设备

3. 参数说明

参数 功能
-t vfstype

指定文件系统的类型,通常不必指定。mount 会自动选择正确的类 型。常用类型有:

光盘或光盘镜像:iso9660

DOS fat16 文件系统:msdos

Windows 9x fat32 文件系统:vfat

Windows NT ntfs 文件系统:ntfs

Mount Windows 文件网络共享:smbfs

UNIX(LINUX) 文件网络共享:nfs

-o options

主要用来描述设备或档案的挂接方式。常用的参数有: loop:用来把一个文件当成硬盘分区挂接上系统

ro:采用只读方式挂接设备

rw:采用读写方式挂接设备

        iocharset:指定访问文件系统所用字符集

device 要挂接 (mount) 的设备
dir 设备在系统上的挂接点 (mount point)

5.9.7 挂载新的硬盘

        (1). 查看系统分区挂载情况

[root@hadoop01 ~]# lsblk -f
NAME            FSTYPE      LABEL UUID                                   MOUNTPOINT
sda                                                                      
├─sda1                                                                   
├─sda2          xfs               4aa2b8f3-4b18-4014-b28b-3bbc766ae4c1   /boot
└─sda3          LVM2_member       seJzTp-oF3a-DjUl-O9VJ-2k3Z-f3VC-BxArDS 
  ├─centos-root xfs               da26f1e1-352d-4331-8ad6-dce42d2ab375   /
  ├─centos-swap swap              3a99a58d-d5fd-498a-8675-ae9462ccea0b   [SWAP]
  ├─centos-var  xfs               e8d0f89c-a9f9-44f0-97a9-f4ca46ad5dfa   /var
  └─centos-home xfs               db7ea4c5-fe0b-4c3a-9634-9e4540e7cfd4   /home
sr0      

        这里可以看出只有 sda 这一块硬盘

        (2). 虚拟机增加硬盘

Linux_第16张图片

 Linux_第17张图片

 Linux_第18张图片

 Linux_第19张图片

 Linux_第20张图片

Linux_第21张图片

         (3). 重启虚拟机

[root@hadoop01 ~]# shutdown -r now

        (4). 分区

        4.1 fdisk /dev/sdb 开始分区

[root@hadoop01 ~]# lsblk -f
NAME            FSTYPE      LABEL UUID                                   MOUNTPOINT
sda                                                                      
├─sda1                                                                   
├─sda2          xfs               4aa2b8f3-4b18-4014-b28b-3bbc766ae4c1   /boot
└─sda3          LVM2_member       seJzTp-oF3a-DjUl-O9VJ-2k3Z-f3VC-BxArDS 
  ├─centos-root xfs               da26f1e1-352d-4331-8ad6-dce42d2ab375   /
  ├─centos-swap swap              3a99a58d-d5fd-498a-8675-ae9462ccea0b   [SWAP]
  ├─centos-var  xfs               e8d0f89c-a9f9-44f0-97a9-f4ca46ad5dfa   /var
  └─centos-home xfs               db7ea4c5-fe0b-4c3a-9634-9e4540e7cfd4   /home
sdb                                                                      
sr0                                                                      
[root@hadoop01 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x81d99c4b 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):

        4.2 输入 m, 进入目录列表

命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

命令(输入 m 获取帮助):

        4.3 输入 n, 新增分区

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 

        4.4 输入 p, 开始分区, 后面按回车

Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):

        4.5 输入 w, 保存 且 退出

        4.6 lsblk -f 查看是否成功

Linux_第22张图片

        (5). 格式化

         5.1 输入并执行 mkfs -t ext4 /dev/sdb1 命令格式化指定分区

         5.2 查看是否成功

Linux_第23张图片

        (6). 挂载

        6.1 创建目录 mkdir -p /home/newdisk

        6.2 mount /dev/sdb1 /home/newdisk        建立设备分区和系统目录的映射关系

        6.3 lsblk -f 查看挂载是否成功

Linux_第24张图片

        (7). 设置重启不生效

        7.1 将映射关系写到配置文件中, 执行: vim /etc/fstab

Linux_第25张图片

         7.2 mount -a 重新加载 /etc/fstab 文件

[root@hadoop01 ~]# mount -a

        7.3 重启系统后, 测试 lsblk -f

Linux_第26张图片

        还在, 说明成功

5.9.8 挂载持有系统镜像光驱

方式一:

        1. 将 linux 系统镜像放到光驱中

Linux_第27张图片

        2. 创建目录 mkdir -p /mnt/cdrom

[root@hadoop01 ~]# mkdir -p /mnt/cdrom

        3. 挂载镜像文件 mount /dev/sr0 /mnt/cdrom

[root@hadoop01 ~]# mount /dev/sr0 /mnt/cdrom
mount: /dev/sr0 写保护,将以只读方式挂载

        4. 进入挂载目录, 找到安装包 (这里找火狐浏览器的安装包)

[root@hadoop01 Packages]# cd /mnt/cdrom/Packages/
[root@hadoop01 Packages]# ls | grep firefox
firefox-68.10.0-1.el7.centos.x86_64.rpm

方式二:

建议使用

        1. 上传 ISO 文件到根目录, 这里使用 Xftp

        2. 创建目录 /mnt/cdrom

[root@hadoop01 ~]# mkdir -p /mnt/cdrom

        3. 通过挂载建立硬件与系统目录的关系

[root@hadoop01 ~]# mount /CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom
mount: /dev/loop0 写保护,将以只读方式挂载

        4. 设置重启不失效

        4.1 lsblk -f, 查看文件系统和挂载点信息

Linux_第28张图片

         4.2 vim /etc/fstab, 添加如下内容

Linux_第29张图片

         然后保存退出

5.10 进程管理类

        进程是正在执行的一个程序或命令, 每一个进程都是一个运行的实体, 都有自己的地址空间, 并占用一定的系统资源

5.10.1 ps 查看当前系统进程状态

        ps: process status 进程状态

1. 基本语法

        ps aux | grep xxx        功能描述: 查看系统中所有进程

        ps -ef | grep xxx          功能描述: 可以查看子父进程之间的关系

2. 选项说明

选项 功能
a 列出带有终端的所有用户的进程
x 列出当前用户的所有进程, 包括没有终端的进程
u 面向用户有好的显示风格
-e 列出所有进程
-u 列出某个用户关联的所有进程
-f 显示完整格式的进程列表

 3. 功能说明

        (1). ps aux 显示信息说明

                USER: 该进程是由哪个用户产生的

                PID: 进程的 ID 号

                %CPU: 该进程占用 CPU 资源的百分比, 占用越高, 进程越耗费资源

                %MEM: 该进程占用物理内存的百分比, 占用越高, 进程越耗费资源

                VSZ: 该进程占用虚拟内存的大小, 单位 KB

                RSS: 该进程占用实际物理内存的大小: 单位 KB

                TTY: 该进程是在哪个终端中运行的。对于 CentOS 来说, tty1 是图形化终端,

                tty2-tty6 是本地的字符界面终端。pts/0-255 代表虚拟终端

                STAT: 进程状态。常见的状态有:

                        R: 运行状态、

                        S: 睡眠状态、

                        T: 暂停状态、

                        Z: 僵尸状态、

                        s: 包含子进程、

                        l:多线程、

                        +:前台显示

                        <: 表示当前进程优先级比较高

                        N: 表示当前进程优先级比较低

                START: 该进程的启动时间

                TIME: 该进程占用 CPU 的运算时间, 注意不是系统时间

                COMMAND: 产生此进程的命令名

        (2). ps -ef 显示信息说明

                UID: 用户 ID

                PID: 进程 ID

                PPID:父进程 ID

                C: CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算, 执行

                     优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高

                STIME:进程启动的时间

                TTY:完整的终端名称

                TIME:CPU 时间

                 CMD:启动进程所用的命令和参数

4. 经验技巧

        如果想查看进程的 CPU 占用率和内存占用率, 可以使用 aux;

        如果想查看进程的父进程 ID 可以使用 ef;

5. 案例实操

        (1).  查看进程的 CPU 占用率和内存占用率

[root@hadoop101 datas]# ps aux

Linux_第30张图片

        (2).  查看进程的父进程 ID

[root@hadoop101 datas]# ps -ef

Linux_第31张图片

5.10.2 kill 终止进程

1. 基本语法

        kill [选项] 进程号                功能描述: 通过进程号杀死进程

        killall 进程名称                   功能描述: 通过进程名称杀死进程, 也支持通配符,                                                                                              这在系统因负载过大而变得很慢时很有用

2. 选项说明

选项 功能
-9 表示强迫进程立即停止

-

3. 案例实操

        (1). 杀死浏览器进程

[root@hadoop101 桌面]# kill -9 5102

        (2). 通过进程名称杀死进程

[root@hadoop101 桌面]# killall firefox

5.10.3 pstree 查看进程树

1. 基本语法

        pstree [选项]

2. 选项说明

选项 功能
-p 显示进程的 PID
-u 显示进程的所属用户

3. 案例实操

        (1). 显示进程 pid

[root@hadoop101 datas]# pstree -p

        (2). 显示进程所属用户

[root@hadoop101 datas]# pstree -u

5.10.4 top 实时监控系统进程状态

1. 基本命令

        top [选项]

2. 选项说明

选项 功能
-d 秒数 指定 top 命令每隔几秒更新。默认是 3 秒在 top 命令的交互模式当中可以执行的命令
-i 使 top 不显示任何闲置或者僵死进程
-p 通过指定监控进程 ID 来仅仅监控某个进程的状态

3. 操作说明

操作 功能
P 以 CPU 使用频率, 默认就是此项
M 以内存的使用率排序
N 以 PID 排序
q 退出 top

4. 查询结果字段解释

第一行信息为任务队列信息

内容 说明
12:26:46 系统当前时间
up 1 day, 13:32 系统的运行时间, 本机已经运行 1 天 13小时 32 分钟
2 users 当前登陆了两个用户
load average: 0.00, 0.00, 0.00 系统在之前 1 分钟, 5 分钟, 15 分钟的平均负载。一般认为小于 1 时, 负载越小。如果大于 1, 系统已经超出负荷

第二行为进程信息

Tasks: 95 total 系统中的进程总数
1 running 正在运行的进程数
94 sleeping 睡眠的进程
0 stopped 正在停止的进程
0 zombie 僵尸进程。如果不是 0, 需要手工检查僵尸进程

第三行为 CPU 信息

Cpu(s): 0.1%us 用户模式占用的 CPU 百分比
0.1%sy 系统模式占用的 CPU 百分比
0.0%ni 改变过优先级的用户进程占用的 CPU 百分比
99.7%id 空闲 CPU 的 CPU 百分比
0.1%wa 等待输入/输出的进程的占用 CPU 百分比
0.0%hi 硬中断请求服务占用的 CPU 百分比
0.1%si 软中断请求服务占用的 CPU 百分比
0.0%st st (Steal time) 虚拟时间百分比。就是当有虚拟机时, 虚拟 CPU 等待实际 CPU 的时间百分比

第四行为物理内存信息

65800k buffers 作为缓冲的内存数量

Mem: 625344k total 物理内存的总量,单位 KB
571504k used 已经使用的物理内存数量
53840k free 空闲的物理内存数量,我们使用的是虚拟机,总 共只分配了 628MB 内存,所以只有 53MB 的空 闲内存了
65800k buffers 作为缓冲的内存数量

第五行为交换分区 (swap) 信息

Swap: 524280k total 交换分区(虚拟内存)的总大小
0k used 已经使用的交互分区的大小
524280k free 空闲交换分区的大小
409280k cached 作为缓存的交互分区的大小

5. 案例实操

[root@hadoop101 atguigu]# top -d 1
[root@hadoop101 atguigu]# top -i
[root@hadoop101 atguigu]# top -p 2575

执行上述命令后, 可以按 P、M、N 对查询出的进程结果进行排序

5.10.5 netstat 显示网络状态和端口占用信息

1. 基本语法

        netstat -anp | grep 进程号                功能描述: 查看该进程网络信息

        netstat -nlp | grep 端口号                 功能描述: 查看网络端口号占用情况

2. 选项说明

选项 功能
-a 显示所有正在监听 (listen) 和未监听的套接字 (socket)
-n 拒绝显示别名, 能显示数字的全部转化成数字
-l 仅列出在监听的服务状态
-p 表示显示哪个进程在调用

 3. 案例实操

        (1). 通过进程号查看 sshd 进程的网络信息

[root@hadoop101 hadoop-2.7.2]# netstat -anp | grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
951/sshd
tcp 0 0 192.168.202.100:22 192.168.202.1:57741
ESTABLISHED 3380/sshd: root@pts
tcp 0 52 192.168.202.100:22 192.168.202.1:57783
ESTABLISHED 3568/sshd: root@pts
tcp 0 0 192.168.202.100:22 192.168.202.1:57679
ESTABLISHED 3142/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN
951/sshd
unix 2 [ ] DGRAM 39574 3568/sshd:
root@pts
unix 2 [ ] DGRAM 37452 3142/sshd:
root@pts
unix 2 [ ] DGRAM 48651 3380/sshd:
root@pts
unix 3 [ ] STREAM CONNECTED 21224 951/sshd

        (2). 查看某端口号是否被占用

[root@hadoop101 桌面]# netstat -nltp | grep 22
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
1324/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
951/sshd
tcp6 0 0 :::22 :::* LISTEN
951/sshd

5.11 crontab 系统定时任务

5.11.1 crontab 服务管理

(1). 重新启动 crond 服务

[root@hadoop101 ~]# systemctl restart crond

1. 基本语法

        crontab [选项]

2. 选项说明

选项 功能
-e 编辑 crontab 定时任务
-l 查询 crontab 任务
-r 删除当前用户所有的 crontab 任务

 3. 参数说明

(1). 进入 crontab 编辑界面。会打开 vim 编辑你的工作

* * * * * 执行的任务

项目 含义 范围
第一个 " * " 一小时当中的第几分钟 0-59
第二个 " * " 一天当中的第几小时 0-23
第三个 " * " 一月当中的第几天 1-31
第四个 " * " 一年当中的第几月 1-12
第五个 " * " 一周当中的星期几 0-7 (0 和 7 都代表星期日)

 (2). 特殊符号

特殊符号 含义
* 代表任何时间。比如第一个 " * " 就代表一小时中每分钟都执行一次的意思
, 代表不连续的时间。比如 "0 8, 12, 16 * * * 命令", 就代表在每天的 8 点 0 分, 12 点 0 分, 16 点 0 分 都执行一次命令
- 代表连续的时间范围。比如 "0 5 * * 1-6 命令", 代表在周一到周六的凌晨 5 点 0 分执行命令
*/n 代表每隔多久执行一次。比如 "*/10 * * * * 命令", 代表每隔 10 分钟就执行一遍命令

(3). 特定时间执行命令

时间 含义
45 22 * * * 命令 每天 22 点 45 分执行命令
0 17 * * 1 命令 每周 1 的 17 点 0 分执行命令
0 5 1, 15 * * 命令 每月 1 号 和 15 号的凌晨 5 点 0 分执行命令
40 4 * * 1-5 命令 每周一到周五的凌晨 4 点 40 分执行命令
*/10 4 * * * 命令 每天的凌晨 4 点, 每隔 10 分钟执行一次命令
0 0 1, 15 * 1 命令 每月 1 号 和 15 号, 每周 1 的 0 点 0 分都会执行命令。注意: 星期天和几号最好不要同时出现, 因为他们定义的都是天。非常容易让管理员混乱。

(4). 案例实操

        (1). 每隔 1 分钟, 向 /root/bailongma.txt 文件中添加一个 11 的数字

*/1 * * * * /bin/echo ”11” >> /root/bailongma.txt

6. 软件包管理

6.1 RPM

6.1.1 RPM 概述

        RPM (RedHat Package Manager), RedHat 软件包管理工具, 类似 windows 里面的 setup.exe, 是 Linux 这系列操作系统里面的打包安装工具, 他虽然是 RedHat 的标志, 但理念是通用的。

        RPM 包的名称格式

        Apache-1.3.23-11.i386.rpm

                -        "apache"  软件名称

                -        "1.3.23-11"  软件的版本号, 主版本和此版本

                -        "i386"  是软件所运行的硬件平台, Intel 32 位处理器的统称

                -        "rmp"  文件扩展名, 代表 RPM 包

6.1.2 RPM 查询命令 (rpm -qa)

1. 基本语法

        rpm -qa                功能描述: 查询所安装的所有 rpm 软件包

2. 经验技巧

        由于软件包比较多, 一般都会采取过滤。rpm -qa | grep rpm软件包

3. 案例实操

        (1). 查询 firefox 软件安装情况

[root@hadoop101 Packages]# rpm -qa | grep firefox
firefox-45.0.1-1.el6.centos.x86_64

6.1.3 RPM 卸载命令 (rpm -e)

1. 基本语法

        (1). rpm -e RPM软件包

        (2). rpm -e --nodeps软件包

2. 选项说明

选项 功能
-e 卸载软件包
--nodeps 卸载软件时, 不检查依赖。这样的话, 那些使用该软件包的软件在此之后可能就不正常工作了

3. 案例实操

        (1). 卸载 firefox 软件

[root@hadoop101 Packages]# rpm -e firefox

6.1.4 RPM 安装命令 (rpm -ivh)

1. 基本语法

        rpm -ivh RPM 包全名

2. 选项说明

选项 功能
-i install, 安装
-v --verbose, 显示详细信息
-h --hash, 进度条
--nodeps 安装前不检查依赖

 3. 案例实操

        (1). 安装 firefox 软件

[root@hadoop101 Packages]# pwd
/run/media/root/CentOS 7 x86_64/Packages
[root@hadoop101 Packages]# rpm -ivh firefox-45.0.1-1.el6.centos.x86_64.rpm
warning: firefox-45.0.1-1.el6.centos.x86_64.rpm: Header V3 RSA/SHA1
Signature, key ID c105b9de: NOKEY
Preparing... ###########################################
[100%]
1:firefox ###########################################
[100%]

6.2 YUM 仓库配置

6.2.1 YUM 概述

        YUM (全称为 Yellow dog Updater, Modified) 是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器。基于 RPM 包管理, 能够从指定的服务器自动下载 RPM 包并且安装, 可以自动处理依赖性关系, 并且一次安装所有依赖的软件包, 无须繁琐地一次次下载、安装

Linux_第32张图片

6.2.2 YUM 的常用命令

1. 基本语法

        yum [选项] [参数]

2. 选项说明

选项 功能
-y 对所有提问都回答 "yes"

 3. 参数说明

参数 功能
install 安装 rpm 软件包
update 更新 rpm 软件包
check-update 检查是否有可用的更新 rpm 软件包
remove 删除指定的 rpm 软件包
list 显示软件包信息
clean 清理 yum 过期的缓存
deplist 显示 yum 软件包的所有依赖关系

 4. 案例实操

        (1). 采用 yum 方式安装 firefox

[root@hadoop101 ~]# yum -y install firefox

6.2.3 修改网络 YUM 源

        默认的系统 YUM 源, 需要连接国外的 apache 网站, 网速比较慢, 可以修改关联的网络 YUM 源为国内镜像的网站, 比如 网易163, aliyun 等

1. 安装 wget, wget 用来从指定的 URL 下载文件

[root@hadoop101 ~] yum install wget

2. 在 /etc/yum.repos.d/ 目录下, 备份默认的 repos 文件

[root@hadoop101 yum.repos.d] pwd
/etc/yum.repos.d
[root@hadoop101 yum.repos.d] cp CentOS-Base.repo CentOS-Base
.repo.backup

3. 下载 网易163 或者是 aliyun 的repos 文件, 任选其一

[root@hadoop101 yum.repos.d] wget
http://mirrors.aliyun.com/repo/Centos-7.repo //阿里云
[root@hadoop101 yum.repos.d] wget
http://mirrors.163.com/.help/CentOS7-Base-163.repo //网易 163.repo // 网易163

Linux_第33张图片

4. 使用下载好的 repos 文件替换默认的 repos 文件

        例如: 用 CentOS7-Base-163.repo 替换 CentOS-Base.repo 

[root@hadoop101 yum.repos.d]# mv CentOS7-Base-163.repo CentOS-Base.repo

 5. 清理旧缓存数据, 缓存新数据

[root@hadoop101 yum.repos.d]#yum clean all
[root@hadoop101 yum.repos.d]#yum makecache

        yum makecache 就是把服务器的包信息下载到本地电脑缓存起来

6. 测试

[root@hadoop101 yum.repos.d]# yum list | grep firefox
[root@hadoop101 ~]#yum -y install firefox

7. 克隆虚拟机

7.1 克隆

(1). 从现有虚拟机 (关机状态) 克隆出新虚拟机, 右键选择管理 => 克隆

Linux_第34张图片

(2). 点击下一步

Linux_第35张图片

(3). 选择虚拟机中的当前状态

Linux_第36张图片

(4). 选择创建完整克隆

Linux_第37张图片

(5). 设置虚拟机名称及存储位置

Linux_第38张图片

(6). 等待克隆完成

Linux_第39张图片Linux_第40张图片

7.2 开机修改系统相关配置

注意: 使用 root 用户

(1). 修改 vim /etc/sysconfig/network-scripts/ifcfg-ens33, 修改 IP 地址

Linux_第41张图片

(2). 修改 /etc/hostname, 修改主机名

Linux_第42张图片

8. Shell 编程

8.1 Shell 概述

Shell 是一个命令行解释器, 它接收应用程序/用户命令, 然后调用操作系统内核。

Linux_第43张图片

Shell 还是一个功能相当强大的编程语言, 易编写、易调试、灵活性强。

1. Linux 提供的 Shell 解析器有

[atguigu@hadoop101 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

 2. bash 和 sh 的关系

[atguigu@hadoop101 bin]$ ll | grep bash
-rwxr-xr-x. 1 root root 941880 5 月 11 2016 bash
lrwxrwxrwx. 1 root root 4 5 月 27 2017 sh -> bash

3. Centos 默认的解析器是 bash

[atguigu@hadoop101 bin]$ echo $SHELL
/bin/bash

8.2 Shell 脚本入门

1. 脚本格式

        脚本以 #!/bin/bash 开头 (指定解析器)

2. 第一个 Shell 脚本: helloworld.sh

        (1). 需求: 创建一个 Shell 脚本, 输出 helloworld

        (2). 案例实操

[atguigu@hadoop101 shells]$ touch helloworld.sh
[atguigu@hadoop101 shells]$ vim helloworld.sh
在 helloworld.sh 中输入如下内容
#!/bin/bash
echo "helloworld"

        (3). 脚本的常用执行方式

                第一种: 采用 bash 或 sh+ 脚本的相对路径或绝对路径 (不用赋予脚本+x 权限)

                sh+脚本的相对路径

[atguigu@hadoop101 shells]$ sh ./helloworld.sh
Helloworld

                sh+脚本的绝对路径

[atguigu@hadoop101 shells]$ sh /home/atguigu/shells/helloworld.sh
helloworld

                bash+脚本的相对路径

[atguigu@hadoop101 shells]$ bash ./helloworld.sh
Helloworld

                bash+脚本的绝对路径

[atguigu@hadoop101 shells]$ bash /home/atguigu/shells/helloworld.sh
Helloworld

                第二种: 采用输入脚本的绝对路径或相对路径执行脚本 (必须具有可执行权限+x)

                1. 首先要赋予 helloworld.sh 脚本的+x 权限

[atguigu@hadoop101 shells]$ chmod +x helloworld.sh

                2. 执行脚本

                相对路径

[atguigu@hadoop101 shells]$ ./helloworld.sh
Helloworld

                绝对路径

[atguigu@hadoop101 shells]$ /home/atguigu/shells/helloworld.sh
Helloworld

注意:

        第一种执行方法, 本质是 bash 解析器帮你执行脚本, 所以脚本本身不需要执行权限。

        第二种执行方式: 本质是脚本需要自己执行, 所以需要执行权限。

8.3 变量

8.3.1 系统预定义变量

1. 常用系统变量

        $HOME、$PWD、$SHELL、$USER 等

2. 案例实操

        (1). 查看系统变量的值

[atguigu@hadoop101 shells]$ echo $HOME
/home/atguigu

        (2). 显示当前 Shell 中所有变量: set

[atguigu@hadoop101 shells]$ set
BASH=/bin/bash
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()

8.3.2 自定义变量

1. 基本语法

        (1). 定义变量: 变量名=变量值, 注意 = 号前后不能有空格

        (2). 撤销变量: unset 变量名

        (3). 声明静态变量: readonly 变量, 注意: 不能 unset

2. 变量定义规则

        (1). 变量名称可以由字母、数字和下划线组成, 但是不能以数字开头, 环境变量建议大写

        (2). 等号两侧不能有空格

        (3). 在 bash 中, 变量默认类型都是字符串类型, 无法直接进行数值运算

        (4). 变量的值如果有空格, 需要使用双引号或单引号括起来

3. 案例实操

        (1). 定义变量 A

[atguigu@hadoop101 shells]$ A=5
[atguigu@hadoop101 shells]$ echo $A
5

        (2). 给变量 A 重新赋值

[atguigu@hadoop101 shells]$ A=8
[atguigu@hadoop101 shells]$ echo $A
8

        (3). 撤销变量 A

[atguigu@hadoop101 shells]$ unset A
[atguigu@hadoop101 shells]$ echo $A

        (4). 声明静态的变量 B=2, 不能 unset

[atguigu@hadoop101 shells]$ readonly B=2
[atguigu@hadoop101 shells]$ echo $B
2
[atguigu@hadoop101 shells]$ B=9
-bash: B: readonly variable

        (5). 在 bash 中, 变量默认类型都是字符串类型, 无法直接进行数值运算

[atguigu@hadoop102 ~]$ C=1+2
[atguigu@hadoop102 ~]$ echo $C
1+2

        (6). 变量的值如果有空格, 需要使用双引号或单引号括起来

[atguigu@hadoop102 ~]$ D=I love banzhang
-bash: world: command not found
[atguigu@hadoop102 ~]$ D="I love banzhang"
[atguigu@hadoop102 ~]$ echo $D
I love banzhang

        (7). 可把变量提升为全局环境变量, 可供其他 Shell 程序使用

export 变量名
[atguigu@hadoop101 shells]$ vim helloworld.sh

        在 helloworld.sh 文件中增加 echo $B

#!/bin/bash
echo "helloworld"
echo $B
[atguigu@hadoop101 shells]$ ./helloworld.sh
Helloworld

        发现并没有打印输出变量 B 的值

[atguigu@hadoop101 shells]$ export B
[atguigu@hadoop101 shells]$ ./helloworld.sh
helloworld
2

8.4 特殊变量

8.4.1 $n

1. 基本语法

        $n        功能描述: n 为数字, $0 代表该脚本名称, $1-$9 代表第一到第九个参数, 十以上的参数需要用大括号包括, 如 ${10}

2. 案例实操

[atguigu@hadoop101 shells]$ touch parameter.sh
[atguigu@hadoop101 shells]$ vim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
[atguigu@hadoop101 shells]$ chmod 777 parameter.sh
[atguigu@hadoop101 shells]$ ./parameter.sh cls xz
==========$n==========
./parameter.sh
cls
xz

8.4.2 $#

1. 基本语法

        $#        功能描述: 获取所有输入参数个数, 常用于循环, 判断参数的个数是否正确以及加强脚本的健壮性

2. 案例实操

[atguigu@hadoop101 shells]$ vim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
echo '==========$#=========='
echo $#
[atguigu@hadoop101 shells]$ chmod 777 parameter.sh
[atguigu@hadoop101 shells]$ ./parameter.sh cls xz
==========$n==========
./parameter.sh
cls
xz
==========$#==========
2

8.4.3 $*、¥@

1. 基本语法

        $*          功能描述: 这个变量代表命令行中所有的参数, $* 把所有的参数看成一个整体

        $@        功能描述: 这个变量也代表命令行中所有的参数, 不过 $@ 把每个参数区分对待

2. 案例实操

[atguigu@hadoop101 shells]$ vim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
echo '==========$#=========='
echo $#
echo '==========$*=========='
echo $*
echo '==========$@=========='
echo $@
[atguigu@hadoop101 shells]$ ./parameter.sh a b c d e f g
==========$n==========
./parameter.sh
a
b
==========$#==========
7
==========$*==========
a b c d e f g
==========$@==========
a b c d e f g

8.4.4 $?

1. 基本语法

        $?        功能描述: 最后一次执行的命令的返回状态。如果这个变量的值为 0, 证明上一个命令正确执行; 如果这个变量的值为非 0 (具体是哪个数, 由命令自己来决定), 则证明上一个命令执行不正确了

2. 案例实操

        判断 helloworld.sh 脚本是否正确执行

[atguigu@hadoop101 shells]$ ./helloworld.sh
hello world
[atguigu@hadoop101 shells]$ echo $?
0

8.5 运算符

1. 基本语法

        "$((运算符))" 或 "$[运算符]"

2. 案例实操

        计算 (2+3)*4 的值

[atguigu@hadoop101 shells]# S=$[(2+3)*4]
[atguigu@hadoop101 shells]# echo $S

8.6 条件判断

1. 基本语法

        (1). test condition

        (2). [ condition ]        注意: condition 前后要有空格

        注意: 条件非空即为 true, [ atguigu ] 返回 true, [  ] 返回 false

2. 常用判断条件

(1). 两个整数之间比较

        -eq  等于  (equal)                     -ne  不等于  (not equal)

        -lt    小于  (less than)                -gt   大于  (greater than)

        -le  小于等于  (less equal)        -ge  大于等于  (greater equal)

       注: 如果是字符串之间的比较, 用等号 "=" 判断相等; 用 "!=" 判断不等

(2). 按照文件权限进行判断

        -r  有读的权限  (read)

        -w  有写的权限 (write)

        -x  有执行的权限  (execute)

(3). 按照文件类型进行判断

        -e  文件存在  (existence)

        -f  文件存在并且是一个常规的文件  (file)

        -d  文件存在并且是一个目录  (directory)

3. 案例实操

        (1). 23 是否大于等于 22

[atguigu@hadoop101 shells]$ [ 23 -ge 22 ]
[atguigu@hadoop101 shells]$ echo $?
0

        (2). helloworld.sh 是否具有写权限

[atguigu@hadoop101 shells]$ [ -w helloworld.sh ]
[atguigu@hadoop101 shells]$ echo $?
0

        (3). /home/atguigu/cls.txt 目录中的文件是否存在

[atguigu@hadoop101 shells]$ [ -e /home/atguigu/cls.txt ]
[atguigu@hadoop101 shells]$ echo $?
1

        (4). 多条件判断 (&& 表示前一条命令执行成功时, 才执行后一条命令, || 表示上一条命令执行失败后, 才执行下一条命令)

[atguigu@hadoop101 ~]$ [ atguigu ] && echo OK || echo notOK
OK
[atguigu@hadoop101 shells]$ [ ] && echo OK || echo notOK
notOK

8.7 流程控制 (重点)

8.7.1 if 判断

1. 基本语法

        (1). 单分支

if [ 条件判断式 ];then
    程序
fi

        或者

if [ 条件判断式 ]
then
    程序
fi

        (2). 多分支

if [ 条件判断式 ]
then
    程序
elif [ 条件判断式 ]
then
    程序
else
    程序
fi

        注意事项:

             1. [ 条件判断式 ], 中括号和条件判断式之间必须有空格

             2. if 后要有空格

2. 案例实操

        输入一个数字, 如果是 1, 则输出 banzhang zhen shuai, 如果是 2, 则输出 cls zhen mei, 如果是其他, 什么也不输出

[atguigu@hadoop101 shells]$ touch if.sh
[atguigu@hadoop101 shells]$ vim if.sh
#!/bin/bash

if [ $1 -eq 1 ]
then
        echo "banzhang zhen shuai"
elif [ $1 -eq 2 ]
then
        echo "cls zhen mei"
fi

[atguigu@hadoop101 shells]$ chmod 777 if.sh
[atguigu@hadoop101 shells]$ ./if.sh 1
banzhang zhen shuai

8.7.2 case 语句

1. 基本语法

case $变量名 in

"值 1")

        如果变量的值等于值 1,则执行程序 1

;;

"值 2")

         如果变量的值等于值 2,则执行程序 2

;;

         …省略其他分支… *)

如果变量的值都不是以上的值,则执行此程序

;;

esac

注意事项: 

        1. case 行尾必须为单词 "in", 每一个模式匹配必须以右括号 ")" 结束。

        2. 双分号 ";;" 表示命令序列结束, 相当于 java 中的 break。

        3. 最后的 "*)" 表示默认模式, 相当于 java 中的 default。

2. 案例实操

        输入一个数字, 如果是 1, 则输出 banzhang, 如果是 2, 则输出 cls, 如果是其他, 输出 renyao

[atguigu@hadoop101 shells]$ touch case.sh
[atguigu@hadoop101 shells]$ vim case.sh

!/bin/bash

case $1 in
"1")
        echo "banzhang"
;;
"2")
        echo "cls"
;;
*)
        echo "renyao"
;;
esac

[atguigu@hadoop101 shells]$ chmod 777 case.sh
[atguigu@hadoop101 shells]$ ./case.sh 1
1

8.7.3 for 循环

1. 基本语法1

for (( 初始值;循环控制条件;变量变化 ))

do

        程序

done

2. 案例实操

        从 0 加到 100

[atguigu@hadoop101 shells]$ touch for1.sh
[atguigu@hadoop101 shells]$ vim for1.sh

#!/bin/bash

sum=0
for((i=0;i<=100;i++))
do
        sum=$[$sum+$i]
done
echo $sum

[atguigu@hadoop101 shells]$ chmod 777 for1.sh
[atguigu@hadoop101 shells]$ ./for1.sh
5050

3. 基本语法 2

for 变量 in 值 1 值 2 值 3…

do

        程序

done

4. 案例实操

        (1). 打印所有输入参数

[atguigu@hadoop101 shells]$ touch for2.sh
[atguigu@hadoop101 shells]$ vim for2.sh

#!/bin/bash
#打印数字

for i in cls mly wls
do
    echo "ban zhang love $i"
done

[atguigu@hadoop101 shells]$ chmod 777 for2.sh
[atguigu@hadoop101 shells]$ ./for2.sh
ban zhang love cls
ban zhang love mly
ban zhang love wls

         (2)比较 $* 和 $@ 区别

                $* 和 $@ 都表示传递给函数或脚本的所有参数, 不被双引号 "" 包含时, 都以 $1 $2...$n 的形式输出所有参数

[atguigu@hadoop101 shells]$ touch for3.sh
[atguigu@hadoop101 shells]$ vim for3.sh

#!/bin/bash
echo '=============$*============='
for i in $*
do
    echo "ban zhang love $i"
done

echo '=============$@============='
for j in $@
do
    echo "ban zhang love $j"
done

[atguigu@hadoop101 shells]$ chmod 777 for3.sh
[atguigu@hadoop101 shells]$ ./for3.sh cls mly wls
=============$*=============
banzhang love cls
banzhang love mly
banzhang love wls
=============$@=============
banzhang love cls
banzhang love mly
banzhang love wls

        当它们被双引号 "" 包含时, $* 会将所有的参数作为一个整体, 以 "$1 $2...$n" 的形式输出所有参数; $@ 会将各个参数分开, 以 "$1" "$2" ... "$n"  的形式输出所有参数

[atguigu@hadoop101 shells]$ vim for4.sh

#!/bin/bash
echo '=============$*============='
for i in "$*"
#$*中的所有参数看成是一个整体,所以这个 for 循环只会循环一次
do
    echo "ban zhang love $i"
done

echo '=============$@============='
for j in "$@"
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
do
    echo "ban zhang love $j"
done

[atguigu@hadoop101 shells]$ chmod 777 for4.sh
[atguigu@hadoop101 shells]$ ./for4.sh cls mly wls
=============$*=============
banzhang love cls mly wls
=============$@=============
banzhang love cls
banzhang love mly
banzhang love wls

8.7.4 while 循环

1. 基本语法

while [ 条件判断式 ]

do

        程序

done

 2. 案例实操

        从 1 加到 100

[atguigu@hadoop101 shells]$ touch while.sh
[atguigu@hadoop101 shells]$ vim while.sh

#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
    sum=$[$sum+$i]
    i=$[$i+1]
done

echo $sum

[atguigu@hadoop101 shells]$ chmod 777 while.sh
[atguigu@hadoop101 shells]$ ./while.sh
5050

8.7.5 跳出循环

        在循环过程中, 有时候需要在未达到循环结束条件时强制跳出循环, shell 使用两个命令来实现该功能: break 和 continue

1. break 命令

        break 命令允许跳出所有循环

2. continue 命令

        continue 命令与 break 命令类似, 只有一点差别, 它不会跳出所有循环, 仅仅跳出当前循环

3. 案例实操

        1. 当 i 等于 5 时, 退出循环

#!/bin/bash

for((i=0;i<=10;i++))
do
        if [ $i -eq  5 ]
        then
                break
        fi
        echo "i = $i"
done

        2. 在 1~10 中, 只打印 2 的倍数

#!/bin/bash

for((i=1;i<=10;i++))
do
        if [ $[ $i % 2 ] -ne 0 ]
        then
                continue
        fi

        echo "i = $i"
done

8.8 read 读取控制台输入

1. 基本语法

        read (选项) (参数)

  • 选项
    • -p: 指定读取值时的提示符
    • -t: 指定读取值时等待的时间 (秒) 如果 -t 不加表示一直等待
  • 参数
    • 变量: 指定读取值的变量名

2. 案例实操

        提示 7 秒内, 读取控制台输入的名称

[atguigu@hadoop101 shells]$ touch read.sh
[atguigu@hadoop101 shells]$ vim read.sh

#!/bin/bash

read -t 7 -p "Enter your name in 7 seconds :" NN
echo $NN

[atguigu@hadoop101 shells]$ ./read.sh
Enter your name in 7 seconds : atguigu
atguigu

8.9 函数

8.9.1 系统函数-basename

1. 基本语法

        basename [tring / pathname] [suffix]        功能描述: basename 命令会删掉所有的前缀包括最后一个 ('/') 字符, 然后将字符串显示出来

        basename 可以理解为取路劲里的文件名称

2. 选项

        suffix 为后缀, 如果 suffix 被指定了, basename 会将 pathname 或 string 中的 suffix 去掉

3. 案例实操

        截取 该 /home/atguigu/banzhang.txt 路径的文件名称

[atguigu@hadoop101 shells]$ basename /home/atguigu/banzhang.txt
banzhang.txt
[atguigu@hadoop101 shells]$ basename /home/atguigu/banzhang.txt .txt
banzhang

8.9.2 系统函数-dirname

1. 基本语法

        dirname 文件绝对路径        功能描述: 从给定的包含绝对路径的文件名中去除文件名 (非目录的部分), 然后返回剩下的路径 (目录的部分)

        dirname 可以理解为取文件路径的绝对路径名称

2. 案例实操

        获取 banzhang.txt 文件的路径

[atguigu@hadoop101 ~]$ dirname /home/atguigu/banzhang.txt
/home/atguigu

        

8.9.3 自定义函数

1. 基本语法

[ function ] funname[()]

{

        Action;

        [return int;]

}

2. 经验技巧

  1. 必须在调用函数地方之前, 先声明函数, shell 脚本是逐行运行。不会像其他语言一样先编译
  2. 函数返回值, 只能通过 $? 系统变量获得, 可以显示加: return 返回, 如果不加, 将以最后一条命令运行结果作为返回值。return 后跟数值 n(0-25)

3. 案例实操

        计算两个输入参数的和

[atguigu@hadoop101 shells]$ touch fun.sh
[atguigu@hadoop101 shells]$ vim fun.sh

#!/bin/bash
function sum()
{
    s=0
    s=$[$1+$2]
    echo "$s"
}

read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

[atguigu@hadoop101 shells]$ chmod 777 fun.sh
[atguigu@hadoop101 shells]$ ./fun.sh
Please input the number1: 2
Please input the number2: 5
7

8.10 数组

        数组中可以存放多个值, Bash Shell 只支持一维数组 (不支持多维数组), 初始化时不需要定义数组大小, 与大部分编程语言类似, 数组元素的下标由 0 开始

1. 定义数组

# 定义数组方式一
array=(A B "C" D)

# 定义数组方式二
array[0]=value0
array[1]=value1

2. 读取数组

读取数组元素值的一般格式是:

${array_name[index]}

3. 获取数组中的所有元素

echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"

4. 获取数组的长度

echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"

5. 遍历数组

方式一

for var in ${arr[*]}
do
echo $var
done

方式二

my_arr=(AA BB CC)
my_arr_num=${#my_arr[*]}
for((i=0;i

6. 案例实操

#/bin/bash

# 定义数组
array=(a b c d e)

# 获取数组第 0 索引处的元素
echo "数组0索引的元素是: ${array[0]}"

# 获取数组中的所有元素
echo "数组的元素为: ${array[*]}"
echo "数组的元素为: ${array[@]}"

# 获取数组的长度
echo "数组元素个数为: ${#array[*]}"
echo "数组元素个数为: ${#array[@]}"

# 遍历数组
echo "遍历数组"
for item in ${array[@]}
do
        echo $item
done

for((i=0;i<${#array[*]};i++))
do
        echo ${array[$i]}
done

8.11 字符串

        字符串是 shell 编程中最常用最有用的数据类型, 字符串可以用单引号, 也可以用双引号, 也可以不用引号

1. 单引号

[root@hadoop01 ~]# skill='java'
[root@hadoop01 ~]# str='I am goot at $skill'
[root@hadoop01 ~]# echo $str
I am goot at $skill

 单引号字符串的限制: 单引号里的任何字符都会原样输出, 单引号字符串中的变量是无效

2. 双引号

[root@hadoop01 ~]# skill='java'
[root@hadoop01 ~]# str="I am goot at $skill"
[root@hadoop01 ~]# echo $str
I am goot at java

双引号的优点: 双引号里可以有变量

3. 获取字符串长度

[root@hadoop01 ~]# skill='java'
[root@hadoop01 ~]# echo ${#skill}
4

4. 提取子字符串

[root@hadoop01 ~]# skill='java'
[root@hadoop01 ~]# str="I am goot at $skill"
[root@hadoop01 ~]# echo ${str:2} # 从2索引向后截取
am goot at java
[root@hadoop01 ~]# echo ${str:2:4} # 从2索引开始向后截取4个字符
am g

5. 查找子字符串

        返回 str1 中包含 str2 中任意字符的第一个位置 (索引从 1 开始)

[root@hadoop01 ~]# str1='adsadadasdasd'
[root@hadoop01 ~]# str2='sd'
[root@hadoop01 ~]# echo `expr index "$str1" "$str2"`
2

8.12 加载其他文件的变量

        和其他语言一样, shell 也可以包含外部脚本, 这样可以很方便的封装一些公用的代码作为一个独立的文件

1. 基本语法

  • . filename        # 注意点号 (.) 和文件名中间有一个空格
  • source filename

2. 案例实操

        定义两个文件 test1.sh 和 test2.sh, 在 test1 中定义一个变量 arr=(java c++ shell), 在 test2 中对 arr 进行循环打印输出

        test1.sh

#!/bin/bash

arr=(java c++ shell)

        test2.sh

#!/bin/bash

# source ./test1.sh # 加载 test1.sh 文件的内容
. ./test1.sh

for var in ${arr[*]}
do
        echo $var
done

        执行 test2.sh

[root@hadoop01 ~]# chmod +x test2.sh 
[root@hadoop01 ~]# ./test2.sh 
java
c++
shell

9. 正则表达式入门

        正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里, 正则表达式通常被用来检索、替换哪些符合某个模式的文本。在 Linux 中, grep, sed, awk 等文本处理工具都支持通过正则表达式进行模式匹配。

9.1 常规匹配

        一串不包含特殊字符的正则表达式匹配它自己, 例如

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep atguigu

        就会匹配所有包含 atguigu 的行

9.2 常用特殊字符

9.2.1 特殊字符: ^

        ^ 匹配一行的开头, 例如

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep ^a

        会匹配出所有以 a 开头的行

9.2.2 特殊字符: $

        $ 匹配一行的结束, 例如

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep t$

        会匹配出所有以 t 结尾的行

        思考: ^$ 匹配什么?

9.2.3 特殊字符: .

        . 匹配一个任意的字符, 例如

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep r..t

        会匹配包含 rabt, rbbt, rxdt, root 等的所有行

9.2.4 特殊字符: *

        * 不单独使用, 他和上一个字符连用, 表示匹配上一个字符 0 次或多次, 例如

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep ro*t

        会匹配 rt, rot, root, rooot, roooot 等所有行

        思考: .* 匹配什么?

9.2.5 字符区间 [ ]

        [ ]        表示匹配某个范围内的一个字符, 例如

        [6,8]               匹配 6 或者 8

        [0-9]               匹配一个 0-9 的数字

        [0-9]*              匹配任意长度的数字字符串

        [a-z]                匹配一个 a-z 之间的字符

        [a-z]*               匹配任意长度的字母字符串

        [a-c, e-f]          匹配 a-c 或者 e-f 之间的任意字符

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep r[a,b,c]*t

        会匹配 rt, rat, rbt, rabt, rbact, rabccbaaacbt 等等所有行

9.2.6 特殊字符: \

        \ 表示转义, 并不单独使用, 由于所有特殊字符都有其特定匹配模式, 当我们想匹配某一特殊字符本身时 (例如, 我想找出所有包含 '$' 的行), 就会碰到困难。此时我们就要将转义字符和特殊字符连用, 来表示特殊字符本身, 例如

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep ‘a\$b’

就会匹配所有包含 a$b 的行。注意需要使用单引号将表达式引起来

10. 文本处理工具

10.1 cut

        cut 的工作就是 "剪", 具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出

1. 基本用法

        cut [选项参数] filename

        说明: 默认分隔符是制表符

2. 选项参数说明

选项参数 功能
-f 列号, 提取第几列
-d 分隔符, 按照指定分隔符分割列, 默认是制表符 "\t"
-c 按字符进行切割后, 加 n 表示取第几列 比如 -c 1

3. 案例实操

        (1). 数据准备

[atguigu@hadoop101 shells]$ touch cut.txt
[atguigu@hadoop101 shells]$ vim cut.txt
dong shen
guan zhen
wo wo
lai lai
le le

        (2). 切割 cut.txt 第一列

[atguigu@hadoop101 shells]$ cut -d " " -f 1 cut.txt
dong
guan
wo
lai
le

        (3). 切割 cut.txt 第二、三列

[atguigu@hadoop101 shells]$ cut -d " " -f 2,3 cut.txt
shen
zhen
  wo
  lai
  le

         (4). 在 cut.txt 文件中切割出 guan

[atguigu@hadoop101 shells]$ cat cut.txt |grep guan | cut -d " " -f 1
guan

        (5). 选取系统 PATH 变量值, 第 2 个 ":" 开始后的所有路径

[atguigu@hadoop101 shells]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atguigu/.local/bin:/
home/atguigu/bin

[atguigu@hadoop101 shells]$ echo $PATH | cut -d ":" -f 3-
/usr/local/sbin:/usr/sbin:/home/atguigu/.local/bin:/home/atguigu/bin

         (6). 切割 ifconfig 后打印的 IP 地址

[atguigu@hadoop101 shells]$ ifconfig ens33 | grep netmask | cut -d " " -f 10
192.168.111.101

10.2 awk

        一个强大的文本分析工具, 把文件逐行的读入, 以空格为默认分隔符将每行切片, 切开的部分再进行分析处理

1. 基本用法

        awk [选项参数] '/pattern1/{action1} /pattern2/{action2}..'  filename

        pattern: 表示 awk 在数据中查找的内容, 就是匹配模式

        action: 在找到匹配内容时所执行的一系列命令

2. 选项参数说明

选项参数 功能
-F 指定输入文件分隔符
-v 赋值一个用户定义变量

 3. 案例实操

        (1). 数据准备

[atguigu@hadoop101 shells]$ sudo cp /etc/passwd ./
passwd 数据的含义
用户名:密码(加密过后的):用户 id:组 id:注释:用户家目录:shell 解析器

         (2). 搜索 passwd 文件以 root 关键字开头的所有行, 并输出改行的第 7 列

[atguigu@hadoop101 shells]$ awk -F : '/^root/{print $7}' passwd
/bin/bash

        (3). 搜索 passwd 文件以 root 关键字开头的所有行, 并输出该行的第 1 列和第 7 列, 中间以 "," 号分割

[atguigu@hadoop101 shells]$ awk -F : '/^root/{print $1","$7}' passwd
root,/bin/bash

        注意: 只有匹配了 pattern 的行才会执行 action

        (4). 只显示 /etc/passwd 的第一列和第七列, 以逗号分割, 且在所有行前面添加列名 user, shell 在最后一行添加 "dahaige, /bin/zuishuai"

[atguigu@hadoop101 shells]$ awk -F : 'BEGIN{print "user, shell"} {print $1","$7}
END{print "dahaige,/bin/zuishuai"}' passwd
user, shell
root,/bin/bash
bin,/sbin/nologin 
。。。
atguigu,/bin/bash
dahaige,/bin/zuishuai

        注意: BEGIN 在所有数据读取行之前执行; END 在所有数据执行之后执行

        (5). 将 passwd 文件中的用户 id 增加数值 1 并输出

[atguigu@hadoop101 shells]$ awk -v i=1 -F : '{print $3+i}' passwd
1
2
3
4

4. awk 的内置变量

变量 说明
FILENAME 文件名
NR 已读的记录数 (行号)
NF 浏览记录的域的个数 (切割后, 列的个数)

 5. 案例实操

        (1). 统计 passwd 文件名, 每行的行号, 每行的列数

[atguigu@hadoop101 shells]$ awk -F : '{print "filename:" FILENAME ",linenum:"
NR ",col:"NF}' passwd
filename:passwd,linenum:1,col:7
filename:passwd,linenum:2,col:7
filename:passwd,linenum:3,col:7
...

        (2). 查询 ifconfig 命令输出结果中的空行所在的行号

[atguigu@hadoop101 shells]$ ifconfig | awk '/^$/{print NR}'
9
18
26

        (3). 切割 IP

[atguigu@hadoop101 shells]$ ifconfig ens33 | awk '/netmask/ {print $2}'
192.168.6.101

10.3 sort

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

1. 基本语法

        sort [选项] 文件名称        

2. 选项说明

选项 功能
-u 去重
-n 按照数值大小排序
-r 使次序颠倒
-t 指定字段分隔符
-k 根据那一列排序

3. 案例实操

        1. 对字符串排序

[root@hadoop01 ~]# cat a.txt 
pear
orange
pear
banana
apple

[root@hadoop01 ~]# sort a.txt 
apple
banana
orange
pear
pear

        2. 去重排序

[root@hadoop01 ~]# cat a.txt 
pear
orange
pear
banana
apple

[root@hadoop01 ~]# sort -u a.txt 
apple
banana
orange
pear

        3. 对数值排序

# 默认按照 字符串 排序
[root@hadoop01 ~]# cat a.txt
1
3
5
7
11
2
4
6
10
8
9

[root@hadoop01 ~]# sort a.txt 
1
10
11
2
3
4
5
6
7
8
9
# 升序排序
[root@hadoop01 ~]# cat a.txt
1
3
5
7
11
2
4
6
10
8
9

[root@hadoop01 ~]# sort -n a.txt 
1
2
3
4
5
6
7
8
9
10
11
# 倒序排序
[root@hadoop01 ~]# cat a.txt 
1
3
5
7
11
2
4
6
10
8
9

[root@hadoop01 ~]# sort -nr a.txt 
11
10
9
8
7
6
5
4
3
2
1

        4. 对成绩排序-根据第二段成绩, 进行倒序显示所有内容

[root@hadoop01 ~]# cat score.txt 
zhangsan 68 99 26
lisi 98 66 96
wangwu 38 33 86
zhaoliu 78 44 36
maq 88 22 66
zhouba 98 44 46

[root@hadoop01 ~]# sort -t ' ' -k2nr score.txt 
lisi 98 66 96
zhouba 98 44 46
maq 88 22 66
zhaoliu 78 44 36
zhangsan 68 99 26
wangwu 38 33 86

        

10.4 wc

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

1. 基本语法

        wc [选项] 文件名称

2. 选项说明

选项 功能
-c 只显示字节数
-w 只显示单词数
-l 只显示行数

3. 案例实操

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

[root@hadoop01 ~]# cat a.txt 
aaa
bbb ccc
ddd eee fff

[root@hadoop01 ~]# wc a.txt 
 3  6 24 a.txt

        2. 只显示文件的行数

[root@hadoop01 ~]# cat a.txt 
aaa
bbb ccc
ddd eee fff

[root@hadoop01 ~]# wc -l a.txt 
3 a.txt

        3. 统计多个文件的 行数单词数字节数

[root@hadoop01 ~]# cat a.txt 
aaa
bbb ccc

[root@hadoop01 ~]# cat b.txt 
aaa
bbb ccc
ddd eee fff

[root@hadoop01 ~]# cat c.txt 
aaa
bbb ccc
ddd eee fff
ggg hhh iii jjj

[root@hadoop01 ~]# wc a.txt b.txt c.txt 
 2  3 12 a.txt
 3  6 24 b.txt
 4 10 40 c.txt
 9 19 76 总用量

10.5 uniq

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

1. 基本语法

        uniq [选项] 文件名称

2. 选项说明

选项 功能
-c 统计每行内容出现的次数

3. 案例实操

        1. 去重

[root@hadoop01 ~]# cat a.txt 
张三 98
李四 100
王五 90
赵六 95
麻七 70
李四 100
王五 90
赵六 95
麻七 70

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

        2. 去重并且统计出现的次数

[root@hadoop01 ~]# cat a.txt 
张三 98
李四 100
王五 90
赵六 95
麻七 70
李四 100
王五 90
赵六 95
麻七 70

[root@hadoop01 ~]# cat a.txt | sort | uniq -c
      2 李四 100
      2 麻七 70
      2 王五 90
      1 张三 98
      2 赵六 95

10.6 tee

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

1. 基本语法

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

2. 案例实操

        将 hello 放到 1.txt、2.txt、3.txt 中

[root@hadoop01 ~]# echo hello | tee 1.txt 2.txt 3.txt
hello

10.7 tr

        tr 命令用于 替换 或 删除 文件中的字符

1. 基本语法

        命令结果 | tr 被替换的字符 新字符        功能描述: 实现替换效果

        命令结果 | tr -d 被删除的字符                功能描述: 删除指定的字符

2. 案例实操

        1. 把小写 he 替换成大写

[root@hadoop01 ~]# echo hello | tr he HE
HEllo

        2. 删除 hello 中的 llo

[root@hadoop01 ~]# echo hello | tr -d llo
he

        3. 单词计数

[root@hadoop01 ~]# cat words.txt 
hello,world,hadoop
hive,sqoop,flume,hello
kitty,tom,jerry,world
hadoop
[root@hadoop01 ~]# 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

10.8 split

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

1. 基本语法

        split [选项] [参数] 文件名称

2. 选项说明

选项 功能
-b 指定每多少字节切成一个小文件
-l 指定每多少行切成一个小文件

3. 参数说明

参数 功能
10k 指定每个切分的小文件大小
100 指定每个切分的小文件的内容行数

4. 案例实操

        1. 按行数分割 a.txt 文件, 查看分割的子文件

[root@hadoop01 test_split]# cat a.txt # 查看当前a.txt中的内容
a
b
c
d
e
f

[root@hadoop01 test_split]# split -l 2 a.txt # 按行数分割
[root@hadoop01 test_split]# ls # 查看分割后目录下的内容
a.txt  xaa  xab  xac
[root@hadoop01 test_split]# cat xaa
a
b
[root@hadoop01 test_split]# cat xab 
c
d
[root@hadoop01 test_split]# cat xac
e
f

10.9 sed

        sed 可以实现 过滤 和 替换 的功能

1. 基本语法

        sed [选项] 'command' 文件名称

2. 选项说明

选项 功能
-n 仅显示处理后的结果
-e 根据表达式, 进行处理

3. 动作说明

动作 功能
p 打印
$ 代表 最后一行
= 打印当前行号
I 忽略大小写 (大写的 i)
d 删除指定内容
i 目标 前面 插入内容
a 目标 后面 追加内容
指定行c 使用新字符串替换选中的行

4. 案例实操

        1. 列出 a.txt 的 1~3 行的数据

[root@hadoop01 test_split]# cat a.txt 
a
b
c
d
e
f

[root@hadoop01 test_split]# sed -ne '1,3p' a.txt 
a
b
c

        2. 列出 a.txt 所有数据

[root@hadoop01 test_split]# cat a.txt 
a
b
c
d
e
f

[root@hadoop01 test_split]# sed -ne '1,$p' a.txt 
a
b
c
d
e
f

        3. 列出 a.txt 所有数据 并且 显示行号

[root@hadoop01 test_split]# cat a.txt 
a
b
c
d
e
f

[root@hadoop01 test_split]# sed -ne '1,$=' -e '1,$p' a.txt 
1
a
2
b
3
c
4
d
5
e
6
f

        4. 查找 a.txt 中包含 e 行

[root@hadoop01 test_split]# cat a.txt 
111:aaa:bbb:ccc
222:ddd:eee:fff
333:ggg:hhh
444:iii

[root@hadoop01 test_split]# sed -ne '/eee/p' a.txt 
222:ddd:eee:fff

        5. 列出 a.txt 中包含 eee 的内容, eee 不区分大小写, 并显示行号

[root@hadoop01 ~]# cat a.txt 
111:aaa:bbb:ccc
222:ddd:eee:fff
333:ggg:hhh
444:iii
555:EEE
[root@hadoop01 ~]# cat -n a.txt | sed -ne '/eee/Ip'
     2	222:ddd:eee:fff
     5	555:EEE

        6. 删除 a.txt 中前 3 行数据, 并显示行号

[root@hadoop01 ~]# cat a.txt 
111:aaa:bbb:ccc
222:ddd:eee:fff
333:ggg:hhh
444:iii
555:EEE

[root@hadoop01 ~]# cat -n a.txt | sed -e '1,3d'
     4	444:iii
     5	555:EEE

        7. 保留 a.txt 中前 4 行数据, 并显示行号

[root@hadoop01 ~]# cat a.txt
111:aaa:bbb:ccc
222:ddd:eee:fff
333:ggg:hhh
444:iii
555:EEE

[root@hadoop01 ~]# cat a.txt | sed -ne '1,4p'
111:aaa:bbb:ccc
222:ddd:eee:fff
333:ggg:hhh
444:iii

        8. 在 a.txt 的第 2 行后加入 aaaaa, 并显示行号

[root@hadoop01 ~]# cat a.txt 
111:aaa:bbb:ccc
222:ddd:eee:fff
333:ggg:hhh
444:iii
555:EEE

[root@hadoop01 ~]# cat a.txt | sed -e '2a aaaaa'
111:aaa:bbb:ccc
222:ddd:eee:fff
aaaaa
333:ggg:hhh
444:iii
555:EEE

        9. 在 a.txt 的第 1 行前添加 bbbbb, 并显示行号

[root@hadoop01 ~]# cat a.txt 
111:aaa:bbb:ccc
222:ddd:eee:fff
333:ggg:hhh
444:iii
555:EEE

[root@hadoop01 ~]# cat a.txt | sed -e '1i bbbbb'
bbbbb
111:aaa:bbb:ccc
222:ddd:eee:fff
333:ggg:hhh
444:iii
555:EEE

        10. 把 a.txt 中的 kkk 替换成 mmm, 并显示行号

[root@hadoop01 ~]# cat a.txt 
111:aaa:bbb:ccc
222:ddd:eee:fff
333:kkk:hhh
444:iii

[root@hadoop01 ~]# cat a.txt | sed -e 's/kkk/mmm/'
111:aaa:bbb:ccc
222:ddd:eee:fff
333:mmm:hhh
444:iii

        11. 把 a.txt 中的 1, 2 行替换为 aaa, 并显示行号

[root@hadoop01 ~]# cat a.txt 
111:aaa:bbb:ccc
222:ddd:eee:fff
333:kkk:hhh
444:iii

[root@hadoop01 ~]# cat a.txt | sed -e '1,2c aaa'
aaa
333:kkk:hhh
444:iii

你可能感兴趣的:(大数据,linux,后端)