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"
Last modification:January 31, 2023
如果觉得我的文章对你有用,请随意赞赏