history
# 表示上一条
!!
# 上一条命令的最后一个参数
!$
# 执行history的第555条
!!555
# 执行最近的一条以vi开头的
!vi
# 键补全 vi 按两下出来全部vi开头的命令
tab
设置别名
alias a="b"
unalias a
正则统配
# 一个或者多个
ls *.txt
# 任选一个
ls [12].txt
# 一个任意的字符
ls ?.txt
>、>>、<
# 重定向
echo "111" > 1.txt
# 清空文件内容
>1.txt
# >> 追加
# 反响重定向
cat < 1.txt
# 发邮件
mail -s "zhuti" 771036148@qq.com <1.txt
# 2>错误重定向
ls 1.txt 2> error.log
ls 1.txt 2>> error.log
# 2和你一样
1.log 2>&1
# 一行显示 |管道符
ls | xargs
任务jobs、ctrl+z
# ctrl+z 暂停任务
sleep 100
# 查看
jobs
# 序号启动 可以提高优先执行
fg 1
# 什么都不加优先执行序号有加号的
fg
变量
# 自定义变量 小写的
# 系统变量 大写的
env 列出用户的系统环境变量
# 定义变量
a=1;b=3
# 打印不出来用户自定义变量
env
# 列出 env 和 用户自定义变量
set
# 只能在当前shell生效,可以在子shell里生效,取消用unset。(bash进入子shell) 全局声明会显示在env里面
export a=1 a=1
# 变量名不能以数字开头
# 不能加空格在shell里面
a = 1
# 不能声明变量
a-1=1
# 大小写字母下划线数字,数组不可以开头
# 有空格做整体要引起来
a='aming linux'
# 查询这个命令是又哪个包安装的
rpm -qf `which vim`
# 双引号可以解析,反引号把整体可以解析
b=`echo $a`
# 变量和字符串合并
a=1;b=$a"123" # 1123
# 单引号不解析
b=$a'$a' //1$a
#### /etc/profile /etc/bashrc ~/.bashrc ~/.bash+profile
# 针对所有用户的
etc
# 针对当前用户的
~/
# 命令行前面的
echo $PS1
\u username \h=hostname \w=path \$=[$|#]
特殊符号
#### 连接符
# && 执行两个,前面成功执行后面
cd /tmp/ && ls
# || 前面成功不执行后面,不成功的话执行后面
cd /tmp/ || ls
# ; 无逻辑关系都执行
ls a.txt;cd /root/
# 放一起显示
cd /tmp/;ls
# 家目录
~
# 2> 错误重定向和正确的一样
ls > 1.log 2>&1
# && 连接符
ls && cd /tmp/
# 最后 & 表示后台运行
sleep 100 &
# 重定向,重定向追加
> >> 2> 2>>
# 任意一个
[12]
cut 分割显示
# 按 ":" 分割(-d "" 按什么分割) -f 取第1段显示
cut -d ':' -f 1 /etc/password
# 按 ":" 分割(-d "" 按什么分割) -f 取第1,2段显示
cut -d ":" -f 1,2 /etc/passwd
# 按 ":" 分割(-d "" 按什么分割) -f 取第1-3段显示
cut -d ":" -f 1-3 /etc/passwd
# -c 2-5 取第2-5个字符显示
cut -c 2-5 /etc/passwd
# -c 2,5 第二个第五个字符
cut -c 2,5 /etc/passwd
sort 排序
# -k3 按第几段排序
sort -t ':' -k3 /etc/passwd
# -n 按数字排序
sort -t ':' -k3 -n /etc/passwd
# -n 数字 从小到大
cut -d ':' -f 3 /etc/passwd | sort -n
# -r倒叙 从大到小
cut -d ':' -f 3 /etc/passwd | sort -nr
# -u去重 从大到小
cut -d ':' -f 3 /etc/passwd | sort -nru
# -c统计次数 去重统计次数显示
cut -d ':' -f 3 /etc/passwd | sort -nr|uniq -c
wc 统计单词、tee 重定向、tr替换
# 有4行 6个单词 67个字符
vagrant@swarm4:~$ wc 1.txt
4 6 67 1.txt
# 显示空格 -A
cat -A 1.txt
# 有几行
wc -l 1.txt
# 行数小于8
line = wc -l | cut -d " " -f1;echo $line
if [ $line -lt 8 ];then echo no; fi
# 重复的行统计
uniq -c
# 重定向到1.log并且输出到屏幕
cat 1.txt | tee 1.log
# tr 替换 把ls的结果中的小写替换成大写
ls |tr 'a-z' 'A-Z'
切割文件
# 创建一个大的文件
for i in `seq 1 10000` ;do cat /etc/passwd >> 1.txt ; done
# 查看文件大小,换算
du -sh 1.txt
# 按kb显示
du -sb 1.txt
# 切割 split -l 按行切割
split -l 10000 1.txt
# 重命名
split -l 10000 1.txt a
# 批量修改加后缀 -i 以空格按多个参数循环输出的
ls nz* | xargs -i mv {} {}.txt
# 按大小分割
split -b 1M 1.txt
grep/egrep
# 查询mysql在1.txt
grep 'mysql' 1.txt
# -c 出现的行数
grep -c 'mysql' 1.txt
# 输出显示出行号
grep -n 'systemd' 1.txt
# 加颜色输出
grep -n --color 'systemd' 1.txt
# -o 统计次数 和wc -l 配合
grep -o 'systemd' 1.txt | wc -l
# 别名
alias grep = `grep --color`
# 不包含,排除
grep -v 'systemd' 1.txt
# -A 同时列出来下面的两行
grep -A2 -n 'systemd' 1.txt
# -B 同时列出来下面的两行
grep -B2 -n 'systemd' 1.txt
# -C 同时列出来上下各两行
grep -C2 -n 'systemd' 1.txt
# -r 是遍历一个目录下包含的文件
grep -r 'root' /etc/
# 包含0-9的任何一个
grep '[0-9]' 'systemd' 1.txt
grep '[a-zA-Z]' 'systemd' 1.txt
# 去除#号开头的行
grep -n '^#' 1.txt
# 以n号结尾的行
grep -n 'n$' 1.txt
# 去重空行和以#开头的行
grep -v '^$' 1.txt | grep -v '^#'
# 非小写字母
grep -n '[^a-z]' 1.txt
# 非数字开头的
grep -n '^[^0-9]' 1.txt
# 过滤任意一个或者多个字符 * . ? + {} \
# 0个或者多个*前面的字符 'o*'看成一个整体
grep 'ro*t' 1.txt
# . 任意的一个字符
grep 'ro.t' 1.txt
# ? 和 -E 合用 0个或者一个?前面的字符 'o?'看成一个整体
grep -E 'ro?t' 1.txt
egrep 'ro?t' 1.txt
# + 和 -E 合用 1个或者多个+前面的字符
grep -E 'ro+t' 1.txt
# .* 任意一个任意字符
grep -E '.*' 1.txt
# 或者
egrep 'root|mysql' 1.txt
grep 'root\|mysql' 1.txt
grep -E 'root|mysql' 1.txt
# ()
grep -E '(00)+' 1.txt
# 指定次数 大于2
grep -E '(00){2}' 1.txt
# 一次或者2次
grep -E '(00){1,2}' 1.txt
sed
# 列出某一行
sed '1p' -n 1.txt
# 列出第1-5行 列出行号 -n 前行号 后-n 列出某些行
grep ".*" -n 1.txt|sed '1,5p' -n
# 列出第5---最后一行
sed '5,$P' -n
# 列出筛选关键字root ,p再将匹配到的内容打印出来
sed '/root/p' -n 1.txt
# 关键字 特殊符号*
sed '/ro*t/p' -n 1.txt
# \ 退译符号
sed '/ro\+t/p' -n 1.txt
# -r 退译
sed -r '/ro+t/p' -n 1.txt
# -e 实现流水线的方式匹配多个表达式
sed -e '/root/p' -e '/mysql/p' -n 1.txt
sed '/root/p;/mysql/p' -n 1.txt
sed '/ro[o|t]t/p' -n 1.txt
# 删除行
sed -r '1,5d' 1.txt
# 查找替换 把1-10行root 替换为toor 不区分大小写
sed '1-10s/root/toor/g' 1.txt
# 1-$ 可以省略
sed 's/root/toor/g' 1.txt
sed '1-$s/root/toor/g' 1.txt
# 删除数字
sed 's/[0-9]//g' 1.txt
# 调换两个字符串位置
head 1.txt | sed -r 's/([^:]+)(:.*:)([^:]+)$/\3\2\1/'
# 替换改源文件
head 1.txt | sed -i -r 's/([^:]+)(:.*:)([^:]+)$/\3\2\1/'
sed -ri 's/([^:]+)(:.*:)([^:]+)$/\3\2\1/' 1.txt
# 终端显示格式化
nginx -V 2>&1 | sed "s/\s\+--/\n --/g"
awk
# 特殊符号
# . 任意一个字符
# r* 0个或者多个r
# r? 0个或者一个r
# r+ 一个或者多个r
# .* 任意个任意字符
# |或者
# ? + | 需要退译 grep -E egrep sed -r
# 按某个字符替换分割
awk -F 'sbin' '{print $2}' 1.txt
# 第一段里面有root的 ~ 表示匹配
awk -F 'sbin' '$1~/root/' 1.txt
# 指定OFS 指定分隔符
awk -F ':' 'OFS="@" {print $1,$2,$3,$4}' 1.txt
# 第一段里面有root,打印时替换分隔符
awk -F ':' '$1~/root/ {OFS="@";print $1,$2,$3,$4}' 1.txt
# 精准匹配
awk -F ':' '$1=="root" {print $1,$2,$3,$4}' 1.txt
# 精准匹配或者行号大于30的,NF 表示段 NR行号
awk -F ':' '$1=="root" || NR>30 {print $1,$2,$3,$4}' 1.txt
awk -F ':' 'NF> 3 && NF <8' 1.txt
# 做计算
awk -F ':' '$1=$3+$4' 1.txt
# NF 表示段 NR行号
awk -F ':' '{OFS="#########";print $NR,$NF}' 1.txt
date
# 格式化
date +"%Y +%m +%d +%H +%M +%S"
# 格式化时间戳
date -d @100
# 格式化
date +"%F %T"
date +"%Y-%m-%d %H:%M:%S"
# 星期几
date +%w
# 一年中的第几周 52周
date +%W
# bc 是一个计算器
echo "365/7"|bc
# 昨天的这个时候
date -d "-1 day" +"%F %T"
# 明天的这个时候
date -d "+1 day" +"%F %T"
# 下个月
date -d "+1 month" +"%F %T"
# 下周
date -d "+1 week" +"%F %T"
# 下年
date -d "+1 year" +"%F %T"
# 10个小时之前
date -d "+1 hour" +"%F %T"
# 10分钟之前
date -d "+1 min" +"%F %T"
# 10s之前
date -d "+1 sec" +"%F %T"
Comment here is closed