bash的基本特性
- 命令历史
作用:查看之前的使用的命令
关于命令历史的文件
每个用户家目录下的.bash_history,在关机时候会自动写入一次(history - r 将内存中的命令历史写入文件)
(给用户写密码)
chroot切换根文件系统
关于命令历史的(环境)变量
env 查看环境变量
set 查看更详细的环境变量参数
HISTSIZE = 1000 数量1000
HISTCONTROL=ignoredups (三个值ignoredups ignorespace ignoreboth)
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
history的常见操作
!+编号:查看编号行命令历史
!+string 匹配最近一次字符串
!! 上一条命令
!$=(快捷键esc+.) 上一条命令的最后一个参数
常见选项
-a 将历史命令缓冲区中的命令写入历史文件
-d 删除
-c 清空历史命令
history # 显示最近#行的命令
path是环境变量的一种
- 命令补全
tab键(作用:提示、自动补全)
拓展:tab键是制表符 \t = 四个空格
- 目录补全
tab键(作用:提示和自动补全)
- 命令展开
data命令
{,}
Linux的目录要遵循FHS目录规则
属性1 属性2
a 1
b 2
mkdir - pv /var/{a,b}-{1,2}
date 基于date命令创建目录
date +
%F年月日
%H 小时
%M 分钟
%m 月份
%S 变秒
%T 时分秒
%D 月日年
%Y 年
练习 : 通过for语句循环创建一个月的日志文件:.log 2019-08-6.http.log
touch‘date +%F’.http.log
at和crontab
for i in {1...30};do
touch ‘date+%Y -%m-$i’.http.log;
done
压缩工具:gzip bzip2 xz
Tar 归档(压缩与解压缩 )zcat不解压看压缩包里文件
压缩只能对文件进行操作而不能对目录进行操作,归档可以对目录进行操作
常见参数
-j bzip2
-J xz(效率最高)
-z gzip
-c creat创建
-x extrect解压 可以不用指定解压的工具
-f 指定文件名
-v 显示详细信息
-t 不解压查看内容,和zcat一样
tar cjvf 2019-08.http.log.bz2 2019-08-*.http.log(* 通配符)
tar xvf 2018-08.http.log.bz2 -C abc
练习 : 编写脚本,每天02:20备份/etc/目录中的所有文件,名称为当天日期且保存文件为压缩文件
crontab -e -- 20 2 * * * /root/xxx.sh
vim xxx.sh
#!/bin/bash
#
tar cJvf /var/’date +%F’ .xz /etc/
chmod +x xxx.sh
补充:
clock / wclock:查看硬件时钟(如果同步系统时钟与硬件时钟)
cal 日历
- 命令的执行状态
在Linux中每条命令执行后都会有两个结果:命令本身放回的内容,命令执行的结果状态
$? 变量,存放命令执行状态的变量0表示成功1-255表示失败
127命令找不到
2文件或目录不存在
13没有权限
.
.
.
程序执行时可用exit手动指定放回的状态码return是函数中指定的返回码
[$? -eq ] &&exit || exit 1
- 命令的快捷键
ctrl + l
+ c 停止进程
+ u 删除光标前字符
+k 删除光标后字符
+ a 跳到光标头
+ e跳到光标尾
+w 以空格为分隔符去删除文件
+z 锁屏
+r 进入交互式页面搜索最近一次使用的命令(要输入字符串)
- alias别名
系统启动时读取一些特殊文件的顺序
全局配置文件:
/etc/profile :定义环境变量(所有用户)
/etc/bashrc : 定义本地变量(alias 所有用户)
在用户的家目录下,自己使用重启后依然有效:
~/.bash_profile : 定义环境变量(指定用户)
~/.bashrc :定义本地变量(指定用户)
export HISTCONTROL= xxx 导入环境变量(通过sources /etc/profile 或. /etc/profile导入)
alias cdnet=“cd /etc/sysconfig/network-scripts/”(=两边不能有空格)
只能在当前shell执行
文件通配符 --globbing
文件通配符不是正则表达式
? 任意单个字符
* 任意长度的任意字符
[] 指定范围内的任意一个字符
^ 1、 以什么开头
2、 [^]指定范围以外的任意一个字符
指定字符类[^0-9A-Za-z]
指定字符类:
[:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:],
[:punct:], [:space:], [:upper:], and [:xdigit:]
^[[:space:]]*$ //有空格键的空行(正则表达式)
9、练习
1、显示/var目录下所有以1开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录;
ls /var/1*[0-9]*[a-z]
2、显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录
ls /etc/[0-9]*[^0-9]
3、显示/etc目录下,以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
ls /etc/[^[:alpha:]][[:alpha:]]*
4、复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/test目录中;
cp -a /etc/m*[^0-9] /tmp/test
5、复制/etc目录下,所有以.d结尾的文件或目录至/tmp/test.com目录中
cp -a /etc/*.d$ /tmp/test.com
6、复制/etc目录下,所有.conf结尾,且以m n r p开头的文件或目录至/tmp/test.com目录中
cp -a /etc/[mnrp]*.conf /tmp/test.com