Linux零基础学习笔记 Shell编程-初学者入门(超详细)

目录

1 linux相关介绍

2 常用命令

2.1 系统命令

2.1.1 man 命令

2.1.2 查看内核信息

2.1.3 echo命令

2.1.4 服务管理

2.1.5 日期时间

2.1.6 关机

2.1.7 ps命令

2.1.8 pidof命令

2.1.9 kill命令

2.1.10 uname命令

2.1.11 partprobe命令

2.2 状态检测命令

2.2.1 网卡查看命令

2.2.2 ping命令

2.2.3 top命令

2.2.4 free命令

2.2.5 who命令

2.2.6 last命令

2.2.7 history命令

2.2.8 sosreport命令

2.3 目录切换查看命令

2.3.1 pwd命令

2.3.2 cd命令

2.3.3 ls命令

2.3.4 nl命令

2.4 文件操作命令

2.4.1 tee命令

2.4.2 查看命令

2.4.3 tr命令

2.4.4 sed命令

2.4.5 wc命令

2.4.6 stat命令

2.4.7 cut命令

2.4.8 diff命令

2.4.9 read命令

2.4.10 Stdin 作用

2.4.11 mail命令

2.4.12 sort命令

2.5 文件目录管理

2.5.1 touch命令

2.5.2 mkdir命令

2.5.3 cp命令

2.5.4 mv命令

2.5.5 rm命令

2.5.6 dd命令

2.5.7 file命令

2.5.8 du 命令

2.6 文件查找与筛选

2.6.1 awk命令

2.6.2 grep 命令

2.6.3 find 命令

2.7 计算命令

2.7.1 let 命令

2.7.2 expr命令

2.7.3 直接计算

2.7.4 小数计算

2.8 网络资源访问与下载

2.8.1 wget命令

2.8.2 curl命令

2.9 压缩命令

2.9.1 tar命令

2.10 监控命令

2.10.1 查看在使用端口

2.10.2 netstat命令

2.10.3 iftop命令

2.10.4 iotop命令

2.10.5 iostat命令

2.11 重定向

2.12 系统符号

2.12.1 管道符|

2.12.2 通配符

2.12.3 转义符

2.13 权限及切换用户

2.13.1 su 命令

2.13.2 sudo服务

2.13.3 chmod命令

2.13.4 chown命令

2.14 工具安装

2.14.1 linux下安装pip工具

3 环境变量

3.1 别名命令

3.2 env命令

3.3 全用户变量

3.3.1 临时变量

3.3.2 永久变量

3.4 定义Shell变量

3.4.1 随机变量

3.4.2 unset 命令

3.5 定义单用户永久变量

4 Vim编辑器

5 YUM仓库配置方式

6 服务器优化

6.1 waitime 优化

6.2 优化timewait方式

6.3 域名与ip绑定的文件

7 数组

7.1 基本数组

7.2 关联数组

8 Shell脚本

8.1 编写shell脚本的三个要素

8.2 内置变量

8.3 Shell判断用户的参数

8.3.1 test命令

8.3.2 文件测试语句

8.3.3 逻辑测试语句

8.3.4 整数值比较语句

8.3.5 字符串比较语句

8.4 If条件判断语句

8.4.1 defined函数

8.4.2 if的高级用法

8.5 循环控制语句

8.5.1 break

8.5.2 continue

8.5.3 exit

8.5.4 sleep

8.6 For条件循环语句

8.6.1 无限循环

8.7 While循环语句

8.8 case多条件分支语句

8.9 until语句

8.10 shell函数

8.10.1 系统函数库

8.11 设置程序脚本开机自动启动

8.12 正则表达式

8.12.1 POSIX特殊字符

9 计划任务

9.1 临时任务

9.1.1 任务建立

9.1.2 任务查看

9.2 周期任务

9.2.1 命令描述

9.2.2 编写方式

10 用户身份与权限

10.1 用户身份与能力

10.2 useradd 命令

10.3 groupadd 命令

10.4 usermod 命令

10.5 userdel 命令

10.6 passwd 命令

10.7 一般权限

10.7.1 设置属主权限

10.7.2 设置属组权限

10.8 特殊权限

10.8.1 SUID

10.8.2 SGID

10.8.3 SBIT

10.9 文件的隐藏属性

10.9.1 chattr 命令

10.9.2 lsattr 命令

10.10 文件访问控制列表

10.10.1 setfacl 命令

10.10.2 getfacl 命令

11 存储结构与磁盘划分

11.1 目录含义

11.1.1 绝对路径

11.1.2 相对路径

11.2 物理设备的命名规则

11.2.1 设备命名规则

11.3 硬盘分区

11.4 文件系统与数据资料

11.4.1 inode与block

11.5 挂载硬件设备

11.5.1 mount命令

11.5.2 umount 命令

11.5.3 添加硬盘设备

11.5.4 格式化

11.5.5 blkid 命令

11.5.6 lsblk 命令

11.6 SWAP

11.6.1 格式化交换分区

11.6.2 swapon 命令

11.6.2 swapoff 命令

11.6.3 操作方式

11.7 磁盘容量配额

11.7.1 quota 磁盘配额服务

11.7.2 开启命令

11.7.3 配额参数

11.7.4 xfs_quota 命令

11.7.5 edquota命令

12 软硬链接

12.1 软硬连接介绍

12.2 ln命令

13 使用RAID与LVM磁盘阵列技术

13.1 RAID

13.1.1 raid技术介绍

13.1.2 部署磁盘阵列

13.2 LVM

13.2.1 逻辑卷管理的三个环节

13.2.2 常用的LVM部署命令

13.2.3 创建LVM

13.2.4 扩容LVM

13.2.5 缩小lvm

13.2.6 e2fsck命令

13.2.7 resize2fs 命令

13.2.8 xfs_growfs 命令

13.2.9 逻辑卷快照

13.2.10 删除逻辑卷

14 iptables与firewalld防火墙

14.1 防火墙管理工具

14.2 iptables

14.3 firewalld

14.4 图形化管理工具

14.5 服务的访问控制列表

15 SELinux 安全子系统

15.1 SELinux配置模式

15.2 getsebool命令

15.3 setseboot 命令

15.4 semanage命令

15.5 restorecon命令

16 使用ssh服务管理远程主机

16.1 密钥生成

16.2 配置网络服务

16.2.1 配置网络参数

16.2.2 创建网络会话(网卡模板)

16.2.3 绑定两块网卡

16.3 远程控制服务

16.3.1 配置sshd服务

16.3.2 远程传输命令

16.4 不间断会话服务

16.4.1 格式及参数


1 linux相关介绍

早期程序安装:使用源码包编译安装

缺点:难度极高、自主解决依赖关系

依赖关系:

RPM(红帽软件包管理器)本质:源码包程序及安装规则,根据安装规则来安装源码包

个人理解:将一个大软件分为几个部分,每个部分是一个程序,例如:QQ主程序、QQ群视频功能、收费模块,需要自己解决依赖关系

Yum:软件仓库,可以根据使用者的需求来自动的安装程序,并且自动建立依赖关系。

初始化进程:从通电开始到开机画面出现的期间,对电脑进行初始化操作

控制硬件最基本的程序叫内核

Api调用接口

很多的api构成了服务程序

SHELL(壳):用于控制终端的系统

Shell的作用是:让用户与硬件沟通的翻译

Shell是统称,不是单独的程序

Shell当中包含的有:BASH(最常用)、SH、ZSH、CSH

可以把shell比作是职业,bash等比作人

在Linux当中完成一项工作敲的是linux命令,但是为了要更贴合当前的工作需要,需要增加参数

Linux命令 参数(可没有) 对象(可没有)

举例:ls -al /data/test.txt

参数分为:短格式:一个字母,长格式:一个单词

Linux命令与参数之间要有空格做间隔,参数之间的合并,只有短格式与短格式之间可以合并。

参数合并时只保留第一个参数的-即可,后面的参数直接跟在第一个后面,不需要空格

/dev/null是一个被称作linux黑洞的文件,把输出信息重定向到这个文件等于删除数据(类似于没有回收功能的垃圾箱)。用法  执行命令 &> /dev/null

在对变量赋值的时候使用变量名=“具体要赋予的值”,也可以使用变量名=$(要赋予的值)

2 常用命令

说明:Linux操作命令区分大小写

2.1 系统命令

2.1.1 man 命令

描述:查看命令的帮助文档

格式:man 要查询的命令

# 例 查看ls命令的用法
man ls


# 输出内容
LS(1)                                        User Commands                                        LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information  about  the FILEs (the current directory by default).  Sort entries alphabeti‐
       cally if none of -cftuvSUX nor --sort is specified.

       Mandatory arguments to long options are mandatory for short options too.

       -a, --all
              do not ignore entries starting with .

       -A, --almost-all
              do not list implied . and ..

       --author
              with -l, print the author of each file

       -b, --escape
              print C-style escapes for nongraphic characters

       --block-size=SIZE
              with -l, scale sizes by SIZE when printing them; e.g., '--block-size=M'; see SIZE  format
              below

       -B, --ignore-backups
              do not list implied entries ending with ~

       -c     with  -lt:  sort  by,  and show, ctime (time of last modification of file status informa‐
              tion); with -l: show ctime and sort by name; otherwise: sort by ctime, newest first

2.1.2 查看内核信息

使用:cat /etc/issue查询参数 根据需要执行 uname -(前一步查询到的参数)

2.1.3 echo命令

描述:输出命令,将需要输出的信息输出到屏幕上

格式:echo [参数] 字符串

参数:

-n: 不要在最后自动换行

-e:若字符串中出现以下转义字符,则特别处理,不会将其当做一般文字输出

转义字符 描述
\ 反斜杠进行转义
\a 报警音
\b 退格键 删除前一个字符
\c 字符串后不加换行符
\f 换行但光标仍旧停留在原来的位置
\n 换行且光标移动至行首
\r 光标移动至首行,但不换行
\t 插入tab
\v 与\f相同
# 例 发出报警提示音,同时将输入的内容居中展示,并且不换行
echo -e -n "\a\thello world"

2.1.3.1 设置字符输出的颜色

格式:echo -e “\033[字体颜色及格式m字符串\033[0m”

说明:\033[0m:只变换该参数前面的字符串的颜色及格式,若不加该参数,则会使得其后面的文本输出都发生变换,连命令提示符都会变

若字符串需要有多种变化比如:字体颜色,背景颜色等 在每个编码后用分号间隔

# 例 将字符串已黄色并且闪烁的形式输出到终端
echo -e "\033[33;5mhello shell!\033[0m"

2.1.4 服务管理

Rhle 7 Systemd:接管了系统当中的很多命令,只能在linux系统下使用这个功能,速度更快一些,从7之后都会使用systemd

Systemctl 管理服务的格式

Systemctl start 服务名称:启动

Systemctl restart 服务名称:重启

Systemctl stop 服务名称:停止

Systemctl status 服务名称:查看

Systemctl enable 服务名称:开机启动

systemctl is-enabled 服务名称:检查服务是否是开机启动

Systemctl disable 服务名称:取消开机启动

2.1.5 日期时间

显示日期时间:date

日期格式化输出:

方式一:date “+%Y-%m-%d %H:%M:%S”

方式 二:date '+%F %T'

永久变更系统时间:hwclock --set --date '2017-08-31 16:56:00'

2.1.6 关机

关机:poweroff

重启:reboot

2.1.7 ps命令

描述 :命令用于显示当前进程的状态,类似于 windows 的任务管理器

说明:ps命令一般与grep命令连用

	格式:ps [参数]
参数 描述
-ef 使用标准格式显示每个进程
-a 列出所有的进程
-w 显示加宽 可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的进程

ps查看信息后的状态

状态标识 状态描述
R(运行) 进程正在运行
S(中断) 进程处于休眠中
D(不可中断) 进程不响应系统异步信号,不能将其中断
Z(僵死) 进程已经终止,但是进程描述符依然存在
T(停止) 进程收到信号后停止运行

2.1.7.1 查询某个进程的运行时间

格式:ps -p 进程id -o lstart

2.1.8 pidof命令

描述:用于查找指定名称进程的进程号,每个进程的pid值是唯一的

格式:pidof 进程名称

# 例 查看nginx的进程号
pidof nginx

2.1.9 kill命令

描述:杀死或停止某个指定pid的服务进程

格式:kill -9 进程id

说明:使用kill命令时,必须指定要杀死进程的pid值,不能使用进程名称,此时pkill、killall 则可以使用进程名称停止进程,其中killall表示终止某个服务的全部进程

pkill格式:pkill 进程名称

killall格式: killall 进程名称

# 扩展 以root身份踢掉某个正在登录系统的用户
pkill -kill -t 所踢用户的tty

2.1.10 uname命令

描述:显示系统信息

格式:uname [参数]

参数 描述
-a 显示全部的信息
-m 显示电脑类型
-n 显示主机名称,等同于hostname
-r 显示操作系统的发行编号
-s 显示操作系统名称

2.1.11 partprobe命令

刷新当前系统状态

2.2 状态检测命令

2.2.1 网卡查看命令

格式:ifconfig | ip addr

配置网卡方式:

1、ip a add ip地址/掩码 dev 网卡名称:网卡添加地址 (该方式为临时添加 重启网卡后失效)

2、常规方式进入网卡配置文件中添加(地址永久生效)

2.2.2 ping命令

格式:ping -c num -i num -W num ip地址

说明:linux下的ping命令不同于在window下,不增加参数时会像windows下增加-t参数一样一直处于ping当中

参数 描述
-c ping地址的次数
-i 每次ping的间隔时间
-W 允许最大的超时时间

2.2.3 top命令

描述:用于实时显示 进程 的动态

格式:top [参数]

参数 描述
-n 更新的次数,完成后将会退出 top
-b 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内

2.2.3.1 top命令回显的信息含义

字段 描述
up 开机时间
users 终端个数
load average 系统负载,最小是0 不超过1 分别代表最近1分钟、5分钟、15分钟负载压力值;如果出现5,则代表服务器出现了问题,只显示该条信息可使用命令:uptime
Tasks 总进程数
runningl 正在运行的进程
sleeping 休眠状态中的进程
stopped 停止进程
zombie 僵死进程,如果这里面有数量有问题,脱离了用户控制的进程,会一直占用系统的资源
%cpu(s): cpu使用率,us:正在使用率,id:cpu空闲比
KIBMem: 物理内存
KIB total 总物理内存,
KIB used 使用内存
KIB free 空闲内存
KIB Swap: 交换分区 当物理内存不够的情况下才会使用交换分区(类似于虚拟内存)
Pid 进程的id号
PR NI 代表优先级:数字越低,优先级越高

2.2.4 free命令

描述:用来查看内存的使用情况

格式:free [参数]

参数 描述
-h 已合适的单位显示内存的使用情况,自动计算对应的单位
-b 已byte为单位显示内存的使用情况
-k 已kb为单位显示内存的使用情况
-m 已MB为单位显示内存的使用情况
-g 已GB为单位显示内存的使用情况
-s<间隔时间> 已间隔时间为周期,持续观察内存使用情况
# 例 查看内存的使用情况,间隔2秒刷新
free -h -s 2

2.2.5 who命令

描述:命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等

格式:who [参数]

参数 描述
-H 显示标题
-q 只显示登入系统的账号名称和总人数

2.2.6 last命令

描述:用于显示用户最近登录信息

说明:由于last展示的信息可以被篡改,所以只作为参考,不能用于黑客攻击时的排查手段

登录记录存放位置:/var/log/messages

格式:last [参数]

参数 描述
-R 不显示hostname 列
-i 显示ip地址
-n [数字] 或 -[数字] 显示几行
-a 在最后一列显示主机名

2.2.7 history命令

描述:显示历史执行过的命令

说明:默认情况下能够存储1000条历史记录,若需更改,可更改profile环境变量文件

格式:history [参数]

参数 描述
-c 清除所有的命令记录

!history[查看的数字]或![要执行的数字]:直接运行对应数字的命令

2.2.8 sosreport命令

描述:用于收集系统配置及架构信息并输出诊断文档

格式:sosreport

2.3 目录切换查看命令

2.3.1 pwd命令

描述:显示用户当前所在的工作

格式:pwd

2.3.2 cd命令

描述:切换工作路径

格式:cd [符号] [准备切换的路径]

符号含义:

符号 描述
返回上一个目录,与前一个目录相互切换
~ 返回到家目录
/ 返回到根目录
.. 返回到上级目录

2.3.3 ls命令

描述:显示目录下正常的文件信息

格式:ls [参数] [要查看的文件所在路径] [文件]

参数 描述
-a 显示目录下所有的文件,包括隐藏文件,隐藏文件前面有“.”
-al 显示目录下所有的文件详细信息,包括隐藏文件
-l 显示目录下的详细信息,不包括隐藏文件

2.3.4 nl命令

描述:以行号的方式显示文本内容

格式:nl 文件名称

2.4 文件操作命令

2.4.1 tee命令

作用:读取标准输入的数据,并将其内容输出成文件

说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存文件,该命令为交互方式输入,若想直接查看结果,则需要与echo 联合使用

格式:tee [参数] 文件名称

echo交互格式:echo "字符串" | tee 文件名称

参数 描述
-a 附加到既有文件的后面,追加模式
-i 忽略终端信号
--version 显示版本信息
# 例 将字符串“这是一条测试消息”输入到文件test1、test2中
echo "这是一条测试消息"|tee -a test1 test2

2.4.2 查看命令

2.4.2.1 cat命令

描述:查看小文件的详细信息

说明:文件的信息一个屏幕上能展示出来的,是小文件

格式:cat [参数] [文件名称]

参数 描述
-n 查看文件时显示文件行号

2.4.2.2 more命令

描述:文件的信息一个屏幕上不够展示出来的,是大文件

格式:more [选项] [文件名称]

2.4.2.3 head命令

描述:查看文本文件的前n行

格式:head -[num] 文件名称

参数 描述
-n num 查看文本文件的前n行

2.4.2.4 tail命令

描述:从后查看文档的行数

格式:tail [参数] 文本文档

参数 描述
-n [num] 查看文档的后几行
-f 实时刷新文档最新一行的数据,用于查看日志

2.4.3 tr命令

描述:用于替换文本文件中的字符(说明:该方式只能与查看命令联合使用,并且若替换后的字符不二次重定向到指定文本,则原本要替换文本中的字符不会有变化,也就是说,只是输出时替换,并不替换实际的内容)

格式:more || cat 文本文档 | tr 原始字符 替换字符

# 例 将file中的123替换成234,输出到标准设备
cat file | tr 123 234
# 输出结果
234
hahah
# 例 将file文件中的小写字母转换成大写字母,输出到标准设备
cat file | tr [:lower:] [:upper:]
# 输出结果
123
HAHAH

2.4.4 sed命令

描述:sed是一个行编辑器,主要功能是替换、删除、打印和追加数据(实际使用时,已替换居多),使用该方式操作的数据可直接修改文本文档的内容

格式:sed [参数] '命令 输入内容 标志' [文件]

替换源文件格式: sed [参数] 's/目标字符/替换字符/g' 文本文档

扩展:可以在内部命令前增加匹配模式对指定行的内容进行处理,使用匹配模式的方式:'/要匹配的字段/'

说明:标志是对命令的补充

参数 描述
-e script 一次处理多条命令
-f script 将文本中指定的命令添加到处理输入时执行的命令中
-n 抑制内存输出
-i 编辑文件内容
-i.xxx 修改时同时创建.xxx备份文件
-r 使用正则表达式
取反(跟在模式条件后与shell有所区别)
内部命令 描述
a 在匹配的后面添加
i 在匹配的前面添加
p 打印
d 删除
s/ 查找/替换/ 查找替换(只替换第一次匹配到的内容)
c 更改
y 转换 N D P
标志 描述
数字 表示新文本替换的模式
g 表示用新文本替换现有文本的全部实例,即匹配到的字符全部进行替换
p 表示打印原始的内容
w filename 将替换的结果写入到另一个文件中
# 例1(不改变源文件) 在每行的后面添加一句话
sed 'a\hello world' file
# 输出结果
1 this is test
hello world
2 this is test
hello world
3 this is test
hello world

# 例2(不改变源文件) 使用匹配将匹配到的行后面增加一句话
sed '/3 this/a\hello world'
# 输出结果
1 this is test
2 this is test
3 this is test
hello world

# 例3(不改变源文件) 将2-4行后面增加一句话
sed '2,4a\hello world'
# 输出结果
1 this is test
2 this is test
hello world
3 this is test
hello world
4 this is test
hello world
5 this is test

# 例4(不改变源文件) 将匹配的位置信息进行更改
sed '/3 this/s/test/TEST/' file
# 输出结果
1 this is test
2 this is test
3 this is TEST
4 this is test
5 this is test

# 例5(不改变源文件) 使用正则表达式删除#或空行
sed -r '/(#|^$)/d' nginx.conf
# 输出结果
user  nginx;
worker_processes  4;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    client_max_body_size 20m;
    sendfile        on;
    keepalive_timeout  65;

# 例6(不改变源文件) 将文本中出现的字符替换成给定的字符
sed 'y/abcdefg/AHIKLJH/' file
# 输出结果
1 this is tJst
2 this is tJst
3 this is tJst
4 this is tJst
5 this is tJst

# 例7(不改变源文件) 将文本中的test替换成TEST,文本中的this替换成THIS
sed -e 's/this/THIS/g;s/test/TEST/g' file
# 输出结果
1 THIS is TEST
2 THIS is TEST
3 THIS is TEST
4 THIS is TEST
5 THIS is TEST

# 例8(不改变源文件)将命令写入到文本order中,通过sed执行
# order文本中的内容
s/THIS/this/g
s/TEST/test/g
# 执行sed
sed -f order file
# 输出结果
1 this is test
2 this is test
3 this is test
4 this is test
5 this is test

# 例9(改变源文件) 将文本testfile中的567替换成hello world
sed -i 's/567/hello world/g' testfile
 

2.4.5 wc命令

描述:用于统计指定文本的行数、字数、字节数

格式:wc [参数] 文本

参数 描述
-l 只显示行数
-w 只显示单词数
-c 只显示字节数
# 例 查看txt文本当中共有多少行、多少个单词、多少个字节
wc -lcw test.txt

# 输出结果 2行 3个单词 18个字节
2  3 18 testfile.txt

# txt内容
[root@test06 test_order]# more testfile.txt 
hello world
hahah

2.4.6 stat命令

描述: 查看文件的时间和具体存储信息

格式:stat “文件名称”

说明:

access (访问时间)最后一次访问时间

modify (修改时间)最后一次修改文件内容的时间

change (更改时间) 最后一次更改文件的名称、属性、权限的时间,不是更改文件内容

2.4.7 cut命令

描述:用于按列提取文本字符

格式:cut [参数] 文件名称

参数 描述
-f 设置要看的列数
-d 用来设置间隔符
# 例 查看passwd文件中的第一列,以“:”为分隔符
cut –d : -f 1 /etc/passwd 

2.4.8 diff命令

描述:比对文件的差异

格式:diff [参数] 文件名称1 文件名称2

参数 描述
--brief 只在文件不同时输出提示
-c 两个文件的具体不同之处
-y 已并列的方式显示文件的不同之处
# 例 比对两个文件是否不同
[root@test06 test_order]# diff --brief *
Files testfile2.txt and testfile.txt differ

# 例 显示两个文本具体的不同之处
[root@test06 test_order]# diff -c *
*** testfile1.txt	2021-11-01 09:45:09.869119523 +0800
--- testfile2.txt	2021-11-01 09:40:48.753105799 +0800
***************
*** 2,5 ****
  hahah
  test
  test2
- this is a test txt
--- 2,4 ----

# 例 已并列的方式显示文本的不同之处
[root@test06 test_order]# diff -y *
hello world							hello world
hahah								hahah
test								test
test2								test2
this is a test txt					      <

2.4.9 read命令

描述:接收键盘的输入,回车代表结束

说明:read也可以与echo联合使用,格式化输入

格式:read [ 参数 ] [提示字符串] 变量名称

参数 描述
-p 增加提示语句,维护提示字符串当中的信息
-n 输入字符个数
-t 限定输入的时间
-s 不回显
# 例1 键入商品的价格并保存为变量
read -p “请输入商品价格:” PRICE

# 例2 输入密码时不显示输入的字符,字符的长度限制为8个字符,输入时间限制为30s
echo "Password:";read -s -n 8 -t 30;echo

2.4.10 Stdin 作用

作用:把管道符前输入的内容传递到文件当中去

# 例 建立密码
echo "密码信息" |password --stdin 用户名

2.4.11 mail命令

描述:发送邮件给指定的用户(目前经过测试,只是相当于给登录系统的其他用户发送消息,跟真实的邮件发送不一样)

格式:mail [用户名称] 发送邮件到 哪个用户

编辑邮件后,点击单个句号“.”结束邮件编辑并发送

# 扩展用法:使用管道符发送邮件
echo "邮件内容" | mail -s "邮件标题" 接收用户名称

2.4.12 sort命令

描述:用于将文本文件内容加以排序,sort可针对文本文件的内容,以 行 为单位来排序

排序规则:默认的排序规则为字符集排序规则,通常几种常见字符的顺序为:"空字符串<空白字符<数值<a<A<b<B<...<z<Z",字典排序规则也如此。

说明:

1、可与管道符结合使用

格式:sort [参数] 文件

参数 描述
-c 检测给定的文件是否已经已经排序。如未排序,则会输出诊断信息,提示从哪一行开始乱序
-C 类似于"-c",只不过不输出任何诊断信息。可以通过退出状态码1判断出文件未排序
-m 对给定的多个已排序文件进行合并。在合并过程中不做任何排序动作。
-b 忽略每行前面开始出的空格字符,"-n"选项隐含该选项。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
--debug 将显示排序的过程以及每次排序所使用的字段、字符。同时还会在最前几行显示额外的信息
-f 1、将所有小写字母当成大写字母。例如,"b"和"B"是相同的。 2、在和"-u"选项一起使用时,如果排序字段的比较结果相等,则丢弃小写字母行。
-k 指定要排序的key,key由字段组成。key格式为"POS1[,POS2]",POS1为key起始位置,POS2为key结束位置。
-n 1、按数值排序。空字符串""或"\0"被当作空。该选项除了能识别负号"-",其他所有非数字字符都不识别。 2、当按数值排序时,遇到不识别的字符时将立即结束该key的排序。
-M 按字符串格式的月份排序。会自动转换成大写,并取缩写值。规则:unknown<JAN<FEB<...<NOV<DEC。
-o 将结果输出到指定文件中
-r 1、默认是升序排序,使用该选项将得到降序排序的结果。 2、注意:"-r"不参与排序动作,只是操作排序完成后的结果。
-s 禁止sort做“最后的排序”
-t 1、指定字段分隔符 2、对于特殊符号(如制表符),可使用类似于-t$'\t'或-t'ctrl+v,tab'(先按ctrl+v,然后按tab键)的方法实现。
-u 只输出重复行的第一行。结合“-f”使用,重复的小写行被丢弃

2.5 文件目录管理

2.5.1 touch命令

描述:创建空白文件或设置文件时间

格式:touch [参数] [文件名称]

参数 描述
-a 仅修改最后访问时间
-m 仅修改修改文件内容时间
-d 同时修改atime(访问时间)与mtime(修改内容时间)
# 例1 修改文件test.txt的访问时间
touch -a '2021-11-1 13:32' test.txt

# 例2 新增文件test.txt
touch test.txt

2.5.2 mkdir命令

描述:创建目录

格式:mkdir [参数] 目录名称

参数 描述
-p 创建层级关系的目录

2.5.3 cp命令

描述:复制文件

格式:cp [参数] 源文件 目标路径

参数 描述
-p 保留原始文件的属性
-d 若对象为“链接文件”,则保留该“链接文件”的属性
-r 含有层级关系的目录持续复制,即复制递归目录
-i 若目标文件存在则在询问是否覆盖
-a 相当于-pdr
# 例 复制文件到其他目录下
cp abc /usr/abc

2.5.4 mv命令

描述:移动文件到指定路径或将文件重命名

格式:mv 源文件 目标路径或新名称

2.5.5 rm命令

描述:删除文件路径或目录

格式:rm [参数] 删除文件或目录

参数 描述
-f 强制删除文件不弹出确认信息
-r 删除目录
-rf 强制删除目录不弹出确认信息

2.5.6 dd命令

描述:用于备份或者是建立系统镜像

格式:dd [参数] 可以按照指定大小和个数来复制文件或转换文件

参数 描述
if= 输入文件的名称
of= 输出文件的名称
bs 设置每个数据的大小
count 设置要复制文件的个数
# 例1 本地的整盘备份的另一个位置
dd if=/dev/hdb of=/dev/hdb

# 例2 制作光驱镜像
dd if=/dev/cdrom of=centos-server-7.iso

# 例3 取一个指定大小的文件并输出
dd if=/dev/zero of=800_file count=1 bs=1G 

2.5.7 file命令

描述:查询目标是文件还是目录,查询文件类型

格式:file [文件名称]

2.5.8 du 命令

描述:查看文件占用大小的情况

格式:du [参数] 要查看的文件名称

# 例 查看newFS目录的使用情况
du -sh /newFS

2.6 文件查找与筛选

2.6.1 awk命令

描述:行编辑器,awk把文件逐行的读入,默认以空格为分隔符将每行切片,切开的部分再进行各种分析处理,awk是行处理器,通常用来格式化文本信息

格式:awk [参数]‘[BEGIN{...}]{PROGRAM:如何处理数据流}[END{...}]’ 处理的文件

说明:

优先级

BEGIN:优先级最高,指的是在处理数据流之前执行的操作,不依赖数据流,可选项

{......}:处理数据流,必选项

END:优先级最低,指的是处理完数据流后执行的操作,依赖数据流,可选项

特殊字符

在awk的数据流处理当中$0代表的是打印全部内容,而不是脚本名称

参数 描述
-F 定义分隔符,表示读入文件以制定的分隔符分割,默认为空格
-f 调用脚本
-v 进入变量模式,可以进行变量的赋值和调用(调用不需要加$符号)
# 例1 和grep命令连用,取出当前剩余内存的值
free -h | grep Mem | awk'{print $4}'

# 例2 单独使用,取出当前剩余内存的值
free -h | awk '/Mem/{print $4}'

# 例3 单独使用,调取文本test.txt 第一行的最后一个单词
awk 'NR==1{print $NF}NR==2{print $NF}' test.txt

# 例4 定义输出格式
awk -F ":" 'NR==1{print $1 "-" $2 "-" $3}' test.txt

2.6.1.1 高级用法

说明:awk可以看做是一门语言,其当中的赋值运算符或语法等与shell有一定的差别

awk定义数组、变量

数组定义方式:数组名称[索引]=值

# 例 定义数组,有两个元素100,200 打印数组元素
awk 'BEGIN{array[0]=100;array[1]=200;print array[0],array[1] }'

awk运算

赋值运算:=

比较运算:> >= == <= < !=

数学运算:+ - * / % ** ++ --

逻辑运算:&& ||

匹配运算:~ !~

1、赋值运算:主要是对变量或者数组赋值,如:name='tom' age=18 array[0]=boy

# 例 定义变量,将变量进行数学计算
awk 'BEGIN{t=3;a=5;print t/a}'

# 例 定义数组,有两个元素100,200 打印数组元素
awk 'BEGIN{array[0]=100;array[1]=200;print array[0],array[1] }'

2、比较运算:如果比较的是字符串则按照ascii码顺序表进行比较,真为1 假为0(与shell的真假返回值相反)

# 例 
awk 'BEGIN{print "a" >= "b"}'
awk 'BEGIN{print 2 < 5 }'

# 例2 输出文本num中大于5的数字
awk '$1>5{print $0}'

3、数学运算

# 例
awk 'BEGIN{print 100/3}'

4、逻辑运算

# 例
awk 'BEGIN{print 100/3>2 && 1>=100}'

5、匹配运算

# 例 匹配限定的字符条件
awk -F: '$1 ~ "ro"{print $0}' passwd

# 不匹配限定的字符条件
awk -F: '$1 !~ "ro"{print $0}' passwd

2.6.1.2 流程控制

# if判断语句语法格式
awk '{if($1>5)print $0;else print $1 }' nums

# for条件循环语句语法格式
awk '{sum=0;for(i=1;i<4;i++){sum+=$i}print sum}' nums(文本文件)

# while循环语句语法格式
awk '{sum=0;i=1;while(sum<150){sum+=$i;i++}print sum}' muns(文本文件)

2.6.1.3 awk环境变量

变量 描述
FIELDWIDTHS 以空格分割的数字列表,用空格定义每个数据字段的精确宽度
FS 指定数据源中字段分隔符号,等同于awk的参数F
OFS 输出字段分隔符号
RS 输入记录分隔符即数据源中行与行的分隔符
ORS 输出记录分隔符号即输出按照怎样做区分
# 例 以指定的格式及分隔符输出passwd
awk 'BEGIN{FS=":";OFS="-"}NR==1{print $1,$3,$5}' /etc/passwd

# 例 以指定的行与行的分隔符输出nums文本
awk 'BEGIN{RS="";ORS="\n"}{print $1,$2,$3}' nums

2.6.2 grep 命令

描述:在文本中执行关键词搜索

格式:grep [参数] [关键字] [文件]

说明:grep当中可以使用正则表达式

参数 描述
-b 将可执行文件当做文本文件搜索
-c 仅显示找到的行数
-i 忽略大小写
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麻辣烫的麻

知识本无价但你的支持是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值