1.shell 是什么?
命令解析器-接收用户输入的命令,然后调取相应的程序
2.查看当前系统做支持的shell类型
#查看当前系统做支持的shell类型
`cat /etc/shells`
[root@gaocun ~]# cat /etc/shells
/bin/sh
/bin/bash #常用
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
#查看用户登入后指定的shell
`cat /etc/passwd` 第七栏
root:x:0:0:root:/root:/bin/bash
3.查看当前登入用户命令执行记录
#方式1
cat ~/.bash_history
#方式2
[root@gaocun ~]# history
3050 05/05/22 15:08:31 last
3051 05/05/22 15:11:15 `cat ~/.bash_history`
3052 05/05/22 15:11:44 history
4.bash命令输入行相关操作
代码补全/路径补全
`[tab] 第一个command --命令补全`
`[tab] 第二个path --档案补全`
删除输入命令
`[ctl]+u 删除光标之前内容`
`[ctl]+k 删除光标之后内容`
移动光标
`[ctl]+a 将光标移动到行首`
`[ctl]+e 将光标移动到行尾`
5.alias的设置
查看当前环境已经设置的alias
alias [aliasName]
在当前环境添加alias
alias gaocun='echo alias setup'
*这样设置是当前session有效
删除别名
unalias [aliasName]
在所有环境添加alias(永久生效)
所有用户有效
将设置命令写入到/etc/bashrc中
指定用户有效
将设置命令写入到~/.bashrc中
6.bash环境启动都执行了那些档案呢?
登入方式 : login shell
/etc/profile(系统整体设置)
~/.bash_profile(用户级别)
只会按照上面顺序读取一个
~/.bashrc
~/.bash_profile
~/.bash_login
~/.profile
登入方式 : non login shell
只会读取 ~/.profile
其他设置档案 :
~/.bash_history 记录历史命令
~/.bash_logout 登出时执行
note : 当修改后需要重新登入或者source才能生效设置的相关配置
7. bash中的 通配符和占位符
8.查看bash执行命令的类型 type
说明: bash 接收的命令有三种类型
file-外部指令
spark-sql
alias-别名
vi
builtin-bash内建指令
cd、alias、echo
`type command`
[root@gaocun ~]# type spark-sql cd cls
spark-sql is /home/software/spark-3.2.1-local/bin/spark-sql
cd is a shell builtin
cls is aliased to `clear'
9.bash 中的变量
9.1 给变量赋值
1.赋值指令
var='变量内容'
var="变量内容"
var=`command`
var=$(command)
2.=两边不能有空白字符
错误示例 var = 2222
3.'、"、`、$() 的区别
var='变量内容'
说明 :
原样输出字符串
无法进行变量替换 '$var'❎
原样输出字符串,不进行转义或取变量(用单引号) 如 echo '!'
var="变量内容"
说明 :
可以进行变量替换"$var"✅
可以识别特殊符号,打印特殊符号时需要转义 如 echo “/!”
var=`command` 同 var=$(command)
说明 :
将command的执行结果,赋值给变量
4.变量命名规范
环境变量大写 JAVA_HOME、SPARK_HOME
自定义变量小写 var=100
9.2 打印变量
方式1: echo-将字符串标准输出stdout
方式1: echo-将字符串标准输出stdout
格式: echo -参数 字符串
参数设置: -e 启用转义字符\
-n 取消结尾添加换行符\n (默认情况下,每次调用echo会在最后添加一个换行符\n)
颜色设置:
格式 : echo -e "\033[背景颜色;文字颜色m str \033[0m"
echo -e "\e[背景颜色;文字颜色m str \e[0m"
背景颜色 : 40-47
字体颜色 : 30-37
动作 : \33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
示例 :
echo -e "\e[41;25m str \e[1m"
方式2: printf-格式化并打印数据
方式2: printf-格式化并打印数据
格式: printf "指定格式" data1 data2
格式替换符 :
%s - 字符串
%c - 字符
%d - 整数
%f - 浮点
%-5s
- 左对齐(不指定时为右对齐)
5 任何字符串都内容都会被5个字符宽度显示,字符串不足5字符时会被空格符填充
%4.2f - 保留2位小数
9.3 删除变量
9.4 环境变量
1.常见的环境变量
HOME 用户路径
SHELL 当前用户的解释器
BASH_VERSION bash版本
HISTSIZE 记录历史命令笔数(内存)
PATH 搜索文档的路径
LANG 当前的语系
BASH=/bin/bash BASH解释器路径
HISTFILE=/home/dmtsai/.bash_history 命令记录历史文件存储位置
$ 当前进程的pid
? 上个命令的返回值
PS1=[\u@\h \W]\$ 命令提示符
[root@gaocun ~]# echo $PS1
[\u@\h \W]\$
2.打印当前环境下的环境变量
env (打印当前环境下的环境变量)
export (打印当前环境下的环境变量)
export 变量名(将变量导出到子进程中去/将变量设置为环境变量-env可查)
set (打印当前环境下的所有变量)
3.将印当前环境下的环境变量 导出到子进程中去
export 变量名
4.环境变量和普通变量的区别
普通变量只在当前进程内有效
环境变量在所有进程内有效
9.5 接收键盘输入内容给变量赋值
格式 : read -参数 变量名称
参数 : -p 提示内容
-t 等待接收信息的秒数(过期后自动退出)
示例 :
read -p "请输入option:" -t 5 option
9.6 bash 中的数组
#定义数组
arr=("刘" "关" "张") #用空白符做元素分割
arr1[0]="福"
arr1[1]="禄"
arr1[2]="寿"
#读取数组元素
echo ${arr[0]},${arr[1]},${arr[2]}
#获取数组长度
echo ${#arr[*]} or ${#arr[@]}
#打印数组
echo ${arr[@]} or ${arr[*]}
#打印数组索引
echo ${!arr[*]]}
#遍历数组
9.7 declare(声明变量类型,默认为字符串)
说明:
bash有两种方式来声明变量
方式1: var=变量内容 #默认数据类型为字符串
方式2: declare -参数 var=变量内容 #数据类型为参数指定的数据类型
示例:
声明数组
declare -a arr=("刘" "关" "张")
声明int
declare -i sum=1+2+3
将变量声明为环境变量
declare -x sum=1+2+3
将变量声明为只读变量
declare -r var=readonly
查看变量类型
declare -p var
9.8 获取字符串长度(字符数)
${#var}
[root@gaocun ~]# sum=123;echo ${#sum}
3
10.设置语言环境
查看当前环境语系
[root@gaocun ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
11.ulimit 限制用户资源
ulimit -a 查询当前用户限制
[root@gaocun ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited #打开文件数量
pending signals (-i) 15071
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 100001
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15071
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
ulimit -f value 限制用户所属文件的大小(单位为kbyte)
ulimit -f 100
12.history 查询历史命令
打印进x笔命令
history 100
清除所有历史命令
history -c
手动将内存中的命令记录写入到文件中(~/.bash_history)
history -aw
note :
当用户登入后所输入的命令会被记录在~/.bash_history 和内存中(history查询)
13.bash 命令执行的顺序
1.绝对/相对路径
2.执行别名alias
3.bash的内建命令(builtin)
4.$PATH按顺序执行
14.设置登入前后欢迎信息
1.登入前
/etc/issue (tty1 ~ tty6)
/etc/issue.net (telnet)
2.登入后(root+一般用户)
/etc/motd (用户登入后会自动打印这个文件的内容)
[root@gaocun ~]# cat /etc/motd
欢迎回家~
[root@gaocun ~]# ssh gaocun
Last login: Fri May 6 07:20:44 2022 from 10.0.24.10
欢迎回家~
15.资料流重定向
15.1 IO流标识
> 覆盖模式 overwrite
>> 追加模式 append
15.2 对信息的过滤(正确信息与错误信息分流)
标准输出(stdout) 命令返回的正确信息(默认值) 1> 1>>
标准错误输出(stderr) 命令返回的错误信息 2> 2>>
可以将错误信息输出到 /dev/null
示例 :
将错误信息输入到文件中
cat "str 3567" 2> list1
将正确信息和错误信息输出到同一文件
find /home -name .bashrc > list1 2>&1
将正确信息和错误信息输出到不同同文件
find /home -name .bashrc > list1 2>list2
15.3 将文件内容复制给变量
read name < file #只将文件首行赋值给变量
name=$(cat file) #将整个文件内容赋值给变量
15.4 将file1内容输出到file2
cat file1 > file2 #覆盖模式
cat file1 >> file2 #追加模式
cat > file < file1 #没用过
15.5 将键盘输入内容报错到指定文件,遇到指定字符则停止
cat > file << "var" #当键盘输出var时停止
[root@gaocun ~]# cat > demo << "stop"
> aaa
> aaa
> bbb
> stop
[root@gaocun ~]# cat demo
aaa
aaa
bbb
15.6 << EOF 将脚本内的文本块重定向
使用方法
cmd(常为交互式命令) <<EOF
command1
command2
EOF
相当于
echo "command1" | cmd(交互式命令)
16. bash 命令分隔符
17. bash 命令返回值
$? : 0表示正确执行
!0表示错误执行
[root@gaocun user]# echo 111
111
[root@gaocun user]# echo $?
0
[root@gaocun user]# gaocun
-bash: gaocun: command not found
[root@gaocun user]# echo $?
18. bash 命令间的逻辑运算
command1 && command2 当1为真时2才会执行
command1 || command2 当1为假是2才会执行
19. 管道命令符 |
格式 command1 | command2 (命令1的stdout 作为 命令2的stdin)
只能接受stdout不能接受stderr
[root@gaocun user]# echo "*.txt" | ls
user.txt
20. cut命令 bash中的split&substr
作用: 按照指定分割符切割字符串或文件,返回一个数组
格式: cut -参数 file
参数:
-d --delimiter=分隔符(必须为单个字符,不能使用正则)
-f 指定获取第几个切割元素,获取多个时用,分割,连续多个时用 x-y
-c 获取指定区间的字符,获取多个字符时用,分割 连续多个时用 x-y
示例:
[root@gaocun ~]# echo "gao#cun#da#wang" | cut -d "#" -f 1,2
gao#cun
[root@gaocun ~]# echo "gao#cun#da#wang" | cut -d "#" -f 2-4
cun#da#wang
[root@gaocun ~]# echo "gao#cun#da#wang" | cut -c 1,5
gc
[root@gaocun ~]# echo "gao#cun#da#wang" | cut -c 1-5
gao#c
注意:
-d 和 -c 不能一起使用
cut -d "#" -f 1 => split(str,'#')[0]
cut -c 1-5 => substr(str,1,5)
cut适用当分割符为固定字符时,当分隔符不固定是建议使用awk
21. grep-bash中的like
作用: 搜索包含指定字符串的行,并打印
格式: grep -参数 'str' file(可同时查询多个文件空格分隔)
参数: -v 反向匹配 打印没有匹配到指定字符串的行
-n 输出的同时打印行号
-i 忽略大小写
-c 只打印包含指定内容行的行数
22. sort-排序
作用: 对文本文件排序,默认按行首字母正向排序
格式: sort -参数 [file stdin]
参数: -f 忽略大小写
-b 忽略行首空白字符
-n 按照数字排序
-r 逆向排序(倒叙)
-u 去重,重复行仅出现一次
-t 指定分割符(默认为tab)
-k 已指定位置的元素排序(默认分割符为tab)
23. uniq-对重复行去重
作用: 对重复行去重
格式: uniq -参数 [file stdin]
参数: -i 忽略大小写
-c 对重复行计数
注意: 建议先对行进行sort后再去重(只会对组内去重)
24. wc-打印文件行数、单词数、字符数
作用: 打印文件行数、单词数、字符数
格式: wc -参数 [file stdin]
参数: -l 仅输出文件的行数
-w 仅输出文件的单词数(分割符为空白符)
-c 仅输出文件的字符数
注意: 不指定参数是默认输出 行数 单词数 字符数 文件名
[root@gaocun ~]# wc user.txt
2139109 6417327 36498078 user.txt
25.tee-双向重定向
作用: 即将接收到的内容输出到屏幕和输出到文件
格式: tee -参数 file
输入:stdin
输出:stdout+file
参数: -a 将stdin追加append到file中
示例:
[root@gaocun ~]# echo "我是大王" | tee demo
我是大王
[root@gaocun ~]# cat demo
我是大王
[root@gaocun ~]#
26. tr-bash中对字符的转换操作
作用: 从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
格式: tr [选项]... SET1 [SET2] [file|stdin]
参数: -d, --delete 删除符合SET1 规则的字符,并不作替换
-t, --truncate 符合set1规则的字符 用set2指定的字符替换,此参数为默认值
-c, --complement 不符合set1规则的字符 用set2指定的字符替换,此参数为默认值(和-t相反)
-s, --squeeze-repeats 符合set1规则的字符,如果连续就对连续字符去重
示例:
1.删除指定字符
[root@gaocun ~]# echo "aaaa#bbbbb#cccc#aaaa"| tr -d 'abc'
###
2.替换指定字符
[root@gaocun ~]# echo "aaaa#bbbbb#cccc#aaaa"| tr -t 'abc' '12'
1111#22222#cccc#1111
符合a的用1替换 符合b的用2替换 符合c的set2没有值,所以不替换
3.反向替换指定字符
[root@gaocun ~]# echo "aaaa#bbbbb#cccc#aaaa"| tr -c 'a' '1'
aaaa111111111111aaaa1[root@gaocun ~]#
将不符合a字符的都替换成1(连\n也替换掉了)
4.缩减指定连续字符
[root@gaocun ~]# echo "aaaa#bbbbb#cccc#aaaa"| tr -s 'a'
a#bbbbb#cccc#a
27.split-将一个大文件切分成多个小文件
作用: 将一个大文件切分成多个小文件
格式: split [选项]... [输入 [前缀]]
参数: -l 设置分割行数(默认5000行)
-d 设置后缀为数字(默认为后缀为字母)
-a 设置后缀为几位字符(默认为2位)
(默认前缀为x)
示例:
split file
默认将文件以每5000行进行分割,后缀默认为两个字符, 前缀默认为x, 生成的文件名为xaa xab xac xad ....
split -l 100 file
设置文件以每 100 行进行分割, 后缀默认为两个字符, 前缀默认为x, 生成的文件名为xaa xab xac xad ....
split -d -l 100 file
设置文件以每 100 行进行分割, 后缀默认为两位数字, 前缀默认为x,生成文件为x00 x01 x02 x03 ....
split -d -l 100 file prefix
设置文件以每 100 行进行分割, 后缀默认为两位数字, 前缀设置为prefix, 生成文件为prefix00 prefix01 prefix02 pefix03 ....
split -d -l 100 -a 3 file prefix
设置文件以每 100 行进行分割, 后缀为3位数字, 前缀为prefix,生成文件为prefix000 prefix001 prefix002 pefix003 ....
[root@gaocun user]# split -d -l 2 demo user
总用量 28
-rw-r--r-- 1 root root 22 5月 7 06:55 demo
-rw-r--r-- 1 root root 4 5月 7 06:56 user00
-rw-r--r-- 1 root root 4 5月 7 06:56 user01
-rw-r--r-- 1 root root 4 5月 7 06:56 user02
-rw-r--r-- 1 root root 4 5月 7 06:56 user03
-rw-r--r-- 1 root root 5 5月 7 06:56 user04
-rw-r--r-- 1 root root 1 5月 7 06:56 user05
28. cat-合并多个小文件
格式: cat -参数 文件1 文件2
参数: -n 打印行号包括空白行
-b 打印行号不包括空白行
-E 显示行尾特殊字符$
-T 显示[tab]用^I表示
-v 显示特殊字符
-A 显示所有特殊字符
示例:
合并小文件
[root@gaocun user]# ll
总用量 28
-rw-r--r-- 1 root root 22 5月 7 06:55 demo
-rw-r--r-- 1 root root 4 5月 7 06:56 user00
-rw-r--r-- 1 root root 4 5月 7 06:56 user01
-rw-r--r-- 1 root root 4 5月 7 06:56 user02
-rw-r--r-- 1 root root 4 5月 7 06:56 user03
-rw-r--r-- 1 root root 5 5月 7 06:56 user04
-rw-r--r-- 1 root root 1 5月 7 06:56 user05
[root@gaocun user]# cat user*
1
2
3
4
5
6
7
8
9
10
29. xargs(从stdin获取参数)
作用: 将管道或标准输⼊(stdin)数据按照指定字符切割成数组
遍历数组,将每个元素作为 command的输入 执行
格式: stdin | xargs -参数 command(不指定命令时,默认为echo)
参数: -d 指定分隔符,默认分隔符为\n 或 空白符 \r \t
-n num 一次用的arguement的个数,默认是用所有元素
-e flag 当元素值为flag时,停止执行
-r 当元素值为空时,停止执行
-p 每次执行前询问是否执行,y执行 n不执行
-t 先打印执行命令,在执行命令
-I var,将元素值赋值给变量var(当command参数位置不定或多次参数时使用)
使用场景:
有效命令无法通过 管道| 来传递参数,这是就需要通过 管道| + xargs 来传递参数
示例:
[root@gaocun user]# echo demo | xargs ls -l 无效
[root@gaocun user]# echo demo | xargs ls -l
-rw-r--r-- 1 root root 22 5月 7 06:55 demo
[root@gaocun user]# echo demo | find -name 错误
find: 遗漏“-name”的参数
[root@gaocun user]# echo demo | xargs find -name
./demo
用途1: 多⾏变单⾏
[root@gaocun user]# cat demo
1
2
3
4
5
6
7
8
9
10
[root@gaocun user]# cat demo | xargs
1 2 3 4 5 6 7 8 9 10
用途2: 单⾏变多⾏
echo "dawang#gaocun#2022#05" | xargs -d# -n1
[root@gaocun user]# echo "dawang#gaocun#2022#05" | xargs -d# -n1
dawang
gaocun
2022
05
用途3: 指定参数位置
[root@gaocun user]# echo "dawang#gaocun#2022#05" | xargs -d# -n1 -I x echo x
dawang
gaocun
2022
05
用途4: 删除指定目录及子目录下的所有.txt文件
[root@gaocun 3.txt]# find /root/user -name '*.txt' -type f -print |xargs -I x rm -rf x
30. -(减号的使用)
格式 从标准输入/标准输出中读取数据
还没有找到使用场景