当我们使用vim命令在进行文件编辑的时候,如果此时需要中断一下,可以使用ctrl+z
命令来暂时跳出当前编辑页面,进行一些列操作之后,当我们需要回到编辑页面的时候 命令行输入fg
就可以再次回到vim的编辑页面了
shell通配符详解
* 匹配任意多个字符
? 匹配任意一个字符
[] 匹配括号中的任意一个字符
() 在子shell中执行
{}集合 touch file {1..9}
shell 脚本中 命令模式下使用ctrl+v 快捷键可以竖向选择,使用delete可以将选择的内容进行删除,一般用来去除前面的空格
$PWD 用来获取当前脚本的所在绝对路径
日期格式化 $(date +%Y-%m-%d %H:%M:%S) +号表示格式的意思
""表示弱引用,其中的变量 n a m e 会被翻 译 ′ ′ 表示强引用,其中的 name会被翻译 ''表示强 引用,其中的 name会被翻译′′表示强引用,其中的name 会作为字符串输出出来 ``表示优先执行 功能等同于$()
变量的运算 加减乘除
$[]
$[2+2] 4
$[2**10] 1024
let 并不明确要求运算结果的时候 比如let i++
以调试的方式执行脚本 bash -vx xxx.sh
获取当前程序内存占用百分比
crontab -e 编辑定时任务
grep 精确匹配字符串开头
grep -E “^aa*” /etc/passwd
不仅仅匹配到了aa开头的用户 还匹配到了a开头的用户,此时我们要为搜索限定一个边界,使用>
来表示查询的边界
grep -E "^aa>*" /etc/passwd
效果如下图
此处只输入 grep -E "^aa>" /etc/passwd 命令是完全匹配不到任何东西的
1 查找文件并删除指令 find/ -name “test*” exec rm -rf {} ; 查找以test开头的文件并将这些文件替换到{}部分从而进行删除。";"前的参数都作为rm的参数,\是对;的转义
2 添加用户组和用户
groupadd mysql
useradd-r -g mysql mysql
groups mysql
3 查询指定名称的用户和组
sudo cat /etc/passwd |grep ‘name’
sudo cat /etc/group | grep mysql
4 du -sh 查看目录和文件的大小
5 将用户分配到指定的组
usermod -a -G [group] [user]
将一个已有用户添加到指定的组【group】中,但是不更新原主组
usermod -a -g [group] [user]
将一个已有用户user添加到apache组中并设置为用户的主组
gpasswd -d [user] [group]
将一个用户从某个组中删除
6 检索文件内容关键字
cat 文件名 | grep -C 20 '关键字' 显示文件里匹配关键字那行以及上下20行
cat 文件名 | grep -B 20 '关键字' 显示关键字及前20行
cat 文件名 | grep -A 20 '关键字' 显示关键字及后20行
grep 系列
grep '[关键字]' [文件名称] #当关键字中含有空格时 需要加单引号
grep -r 'xxxx' path #递归检查path路径下带有xxx关键字的文件
grep -C 10 'xxxx' xxx.txt 检索xxxx上下10行数据
grep -B 10 'xxxx' xxx.txt 检索xxxx上面10行数据
grep -A 10 'xxxx' xxx.txt 检索xxxx下面10行数据
grep 'xxxx' -r -l . 再当前目录下检索存在xxxx关键字的文件
grep 'server' nginx.conf |grep ':' #在nginx.conf中检索同时包含`server`和`:`的行
7 在某一路径下检索文件
find / -name [xxx] 在根目录下检索名为xxx的文件,会递归检索到每一个子目录中
find / -name a*a 在根目录下检索以a开头 以a结尾的文件,会递归检索到每一个子目录中
更快速的检索文件locate *.c
8 检索关键字之外的名字
ls |grep -v keep* #检索除keep开头的其余文件/文件夹的名字
ls |grep -v keep* | xargs rm -rf # xargs用于从 标准输入获得参数 并且传递给后面的命令 表示删除除keep开头文件之外的文件
9 -bash: export: `=': not a valid identifier linux 等号两边不能有空格
10 使用linux rz命令时传输文件乱码中断
10.1 原因是因为文件中包含控制字符
10.2 使用#8中方法删除保留文件之外的其余文件/2.使用inode进行删除,`ls -i`查询文件inode号,find ./ -inum 1234 | xargs rm -rf 进行删除
10.3 使用rz -be 命令进行传输,b表示使用二进制 -e表示强制escape(避开) 所有控制字符
11 使用tar -zxvf xxxx.tar文件时报错
使用tar -xvf xxx.tar -z 表示使用gzip命令进行压缩,tar后缀文件并没有使用gzip压缩,所以不能使用-z
12 xargs mv 命令高效移动文件
ls | grep -v itrusnccsite-3.0.2.jar | xargs -I {} mv {} /usr/local/apache-tomcat-8.5.42/thirdlib
-I 将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。(大写i)
find ./ -mtime -10 -type f| xargs -I {} mv {} …/yolo/
-mtime 根据时间单位天 -10 表示10天之内 +10 表示10天之前
-mmin 根据时间单位分钟 -10 表示10分钟之内 +10 表示10分钟之前
-type 查找类型 f 表示文件 d 表示文件夹
13 vim 复制一行
#将光标移动到要复制的行上,使用yy 复制一行
#将光标移动到要粘贴的位置,使用p 粘贴一行
14 统计文件夹下文件个数
ls -l | grep "^-" | wc -l(不包含子文件夹)
ls -lR | grep "^-" | wc -l(递归统计)
15 将文件夹下的文件按照时间排序
ls -t #按照文件修改时间降序排序 最新的排在最上面
ls -tr # 按照文件的修改时间升序排序,最新的排在最后面
16 unzip 解压到指定文件
unzip xxxx.zip -d /tmp/test/ /test目录不存在时,会自动创建,但是/tmp/test路径不存在时 会报错 -d表示指定目录
unzip -l test.zip #查看压缩包文件
unzip -t test.zip
#查看文件是否损坏
unzip test.zip
#解压文件到当前目录
unzip 'test*.zip'
# 解压test开头的所有zip文件。test*.zip 需要用单引号包裹起来
17 rar 文件解压和压缩
sudo apt install rar
# 安装rar
rar l test.rar
#查看压缩包文件内容
rar x test.rar /home/test
解压文件到指定目录
rar a test.rar test1 test2
将test1 test2两个文件压缩到test.rar
18 scp 传输文件
scp -P 22 test.txt root@192.168.71.128:/home/test
-P 指定传输端口 不指定默认22 必须再选择的文件之前进行指定
test.txt 传输的文件
root: 目标服务器登录用户名
192.168.71.128: 目标服务器ip
:/home/test :目标服务器路径
19 shell脚本中$的用法
$ 符号 | 说明 |
---|---|
$0 | Shell 的命令本身 |
1到9 | Shell 的第几个参数 |
$? | 显示最后命令的执行情况 |
$# | 传递到shell脚本的参数个数 |
$$ | 脚本运行的当前进程PID |
$! | 后台运行的最后一个进程的PID |
20 sed 命令插入一行
在操作docker容器中的文件时,有可能容器中没有安装vi 、vim命令,此时使用sed命令可以完成文件内容的修改
sed '2i\nameserver 192.168.100.199' /etc/resolv.conf