涉及部分命令
ulimit
限制用户使用系统的资源,如开启文件数量,cpu使用时间,内存等
-H 严格设置,不能超过这个值
-S 警告设置
-a 列出所有限制额度
-f 最大文件容量(KB)
-d 最大段内存
-t 最大cpu使用时间(s)
-u 最大进程数量
别名 alias,unalias
history
n 数字,列出几行
-c 清楚history中的内容
source
将配置文件读取到当前的bash环境中
source 配置文件
stty,set
终端环境设置,比如说 ctrl+c 中断程序运行,用stty可以更改默认
stty
-a 列出所有参数
intr 发送一个中断信号给程序
quit 发送一个quit
erase 向后删除字符
kill 删除目前命令行上的所有文字
eof End of file 结束输入
start 某个程序停止后,重新启动outpu
stop 停止目前屏幕输出
susp 一个terminal stop 给到程序,即结束程序的生命
修改,设置向后删除为 ctrl + h , 由上图知默认为 ctrl+?
stty erase ^h
last
显示登陆者信息
双向重定向 tee
tee 会将数据同时送到文件与screen上
-a 以append方式追加到文件中
原来 cat /etc/passwd > ./passwd.bak 这条命令的作用是讲cat 读取到的内容重定向到passwd.bak中,那假如我还需要用到这段内容怎么办,可以使用tee
vim编辑器的使用
vi有三种模式:一般命令模式,编辑模式,命令行模式
i , o , a 进入编辑模式
[ESC] 退回到一般模式
命令模式输入 [:wq] 保存,输入 [:wq!] 强制刷入 [:q!] 强制退出退出
$ 移动到该行末尾
G 移动到文件的最后一行
/word 向光标下寻找word
?word 向光标上寻找word
x 删除一个字符
dd 删除整行
ndd 删除光标所在位置向下n行
yy 复制当前这一行
nyy 复制光标所在位置向下n行
p 粘贴
u 撤销上一个动作
认识学习bash
shell:控制内核的东西
内核:控制硬件的东西
变量的设置与使用
使用
echo $variable
echo $PATH
echo ${PATH}
设置
myname=namexxx
echo ${myname}
** 单双引号区别**
- 如需使用其他命令,如查看内核
变量累加
PATH="$PATH":/home/bin 或者 PATH={PATH}:/home/bin
# 取消一个变量
unset 【变量名字】
环境变量
两个命令分别是env,export
HOME 代表用户的根目录
SHELL 当前环境用的是哪个shell
PATH 执行文件查找路径
LANG 当前系统的语系
变量内容的删除,取代,替换
变量设置方式 | 说明 |
---|---|
${变量#关键词} | 从头开始删除符合【关键词】的内容,最短数据删除 |
${变量##关键词} | 从后开始删除符合【关键词】的内容,最长数据删除 |
${变量%关键词} | 从头开替换除符合【关键词】的内容,替换第一个匹配的 |
${变量%%关键词} | 从头开始替换符合【关键词】的内容,替换所有 |
变量键盘读取,数组与声明:read,array,declare
read
-p 指定提示符
-t 等待秒数
declare
-a 变量声明为一个数组
-i 变量声明为一个整形
-x 声明为一个环境变量
-r 设置为readonly ,不可修改 ,unset
数组:array
bash 登录与欢迎信息
主要修改 /etc/issue 文件 和 /etc/motd(centos)
管道命令(pipe)
【|】 界定符号,处理由前一个命令传来的正确信息,也就是标准输出信息
选取命令:cut 、grep
cut
-d 指定按什么分隔的字符
-f 取分隔之后的第几个位置结果
grep
-a 将二进制文件以文本文件的方式查找数据
-c 计算找到的次数
-i 忽略大小写
-n 输出行号
-v 反向选择
排序命令,sort,wc, uniq
sort
-f 忽略大小写
-n 以数字方式排序
-b 忽略最前面的空格
-M 以月份名字排序
-r 反响排序
-t 分隔符号
-k 以哪个field排序
wc
-l 列出行数,即文件总行数
-w 多少字 (英文字母)
-m 多少字符
uniq
当排序完成,想将重复数据仅显示一条(去重)
-i 忽略大小写字符
-c 进行计数
统计每个人登陆总次数
正则表达式与文件格式化处理(sed,awk)
正则表达式
特殊符号 | 代表意义 |
---|---|
[:alnum:] | 0–9,A–Z,a–Z |
[:alpha:] | A–Z,a–z |
[:blank:] | 代表空格和tab建 |
[:lower:] | a–z 小写字母 |
[:upper:] | A–Z |
[:digit:] | 0–9 数字 |
^ | 表示开头 |
$ | 表示结尾 |
[] | 匹配[] 里面的内容 |
* | 匹配任意 |
[^a] | 开头不是a的 |
^[a-z] | 开头是小写字母 |
{x,y} | 匹配x,-y 个数 |
匹配以点结束的内容
grep '\.$' regular_express.txt
sed 工具
-n 只有经过sed 处理的数据才会显示出来
-e 编辑模式
-f 将sed操作写到一个指定的file中
-r 正则支持
-i 直接修改文件
操作说明
a 新增
c 替换
d 删除
i 插入
p 打印
s 替换 ,搭配正则,sed ‘s/pattern or old string/replace_string/g’
nl 查看文件显示行数 sed ‘2,5’ 删除2-5 行
\n 换行 2a 第二行增加 drink beer
使用 [] 反斜杠 来换行
c 替换 2----5行为 2-5 line
sed s模式正则替换
sed ‘s/要替换的字符/新的字符/g’
联系,过滤出当前网卡的32位ip地址
ifconfig ens33 查看 ens33信息,然后grep 过滤出 【inet 空格】那一行的数据,第一次sed 【重开头一直找到inet 后面有个空格】这里内容的字符替换成空,第二次sed 查找【空格 一直到net】 这里面的内容替换成空
加个$ 严谨一点
接下来删除文件的空白行,以及注释行(以#开头的都是注释),
grep 实现
替换前
-v 反选(可理解为不想要匹配的东西) ^$ 表示为空行,^# 表示去掉注释行
sed 实现
/…/ 里面写正则
以上操作都是定向的显示出来
加上 -i 为操作源文件,危险操作建议之前backup
** awk使用 **
awk ‘条件类型{操作}条件类型2{操作2}’ filename
查看第1列 与 第3列
awk 处理流程
- 读入第一行,将第一行的数据写入 $0,$1, $2…
- 根据条件类型的显示,判断是否需要后续操作
- 完成所有操作与条件
- 重复 1 2 3
awk 变量
变量 | 代表意义 |
---|---|
NF | 每一行拥有的字段总数 |
NR | 目前awk所处理的是第几行 |
FS | 目前隔离字符,默认是空格 |
awk的操作都是以 ‘’ 单引号括住
在 awk中 NR和NF 可以不使用 $ 符号
在awk中表示字符串使用 " " 双引号
为什么第一行没有被:冒号分隔出来,是因为读入第一行的时候还是默认 以空格分隔,我们可以加入BEGIN
文件对比工具 diff
shell脚本
$? 查看上一个命令执行成功与否,
执行脚本的几种方式:
1.绝对路径,脚本需要加上可执行权限
2.相对路径,脚本需要加上可执行权限
3.bash shell脚本
第一行是执行这个脚本使用的shell
记得修改权限,chmod +x file.sh
示例
数值运算
$((计算式))
计算浮点数 通过 bc工具
shell中的${},##, %% , :- ,:+, ? 的使用,
利用test命令测试功能
测试参数 | 代表意义 |
---|---|
关于文件是否存在 | |
-e | 文件名是否存在 |
-f | 文件名是否存在并且为一个文件 |
-d | 文件名是否存在且为一个目录 |
关于文件的权限检测 | |
-r | 文件是否具有可读 |
-w | 是否有可写 |
-x | 是否有可执行 |
两个文件比较 | |
-nt | 判断file1 是否比file2 新 |
-ot | 判断file是否比 file2旧 |
-ef | 判断是否为同一个文件,可在hard link的判断上 |
整数之间的判断 | |
-eq | 两数值相等 |
-ne | 两数值不相等 |
-gt | n1 大于n2 |
-lt | n1 小于 n2 |
-ge | n1 >= n2 |
-le | n1 <= n2 |
字符串判断 | |
test -z string | 判断是否为0 若为空,返回true |
test -n string | 判断是否非空 ,非空true ,空false |
test str1==str2 | 判断是否相等 ,相等返回true |
test str1!=str2 | 判断不相等,不相等返回 true |
多重条件判断 | |
-a | 如: test -r file -a -x file, 则当 file具有 可读和可执行时才满足条件返回 true |
-o | 满一个条件即可 |
! | test ! -x file 当file 没有可执行时条件满足,返回true |
中括号【】也是判断符号
shell脚本中的默认变量
$# 参数个数
$@ 如 $1 $2 $3 为文件后面接受的参数
shift 变量号码偏移
if … then
&& 表示 and
|| 表示 or
语法格式
if [条件判断1] then;
.......
else [条件判断2] then;
......
else
.....
fi
判断当前机器的 3306,6379 服务是否开启
function 函数
定义
function fname(){
}
while 循环
语法格式
while [条件判断式]
do
done
for 循环
语法格式
for i in xxx
do
.......
done
shell 脚本的调试
sh -n 不执行脚本,查询语法问题
-v 执行脚本前,将文件的内容输出到screen
-x 将使用到的脚本内容输出到屏幕上