Vim命令
gg #双击小写g跳回第一行
G #点击一次大写G跳回最后一行
10 G #选择要跳的行数,在选择G,跳到指定行
:set nu #显示行号
:set nonu #取消行号
:set paste #解决多行错乱问题
$ #移到行的末尾(英文)
^ #移到行的开头(英文)
y #复制当前行
10 yy #向下复制10行
p #粘贴
dd #删除当前行
x #删除单个字符
10 dd #删除10行
/要查找的内容 #查询字符(N向上找;n向下找) 查找内容区分大小写
:/? 回车 #取消查询
u #撤销操作
:% s/ssh/SSH/g #全文替换 将小写ssh替换成大写SSH(% 代表全文;s/代表替换;/代表全部)
:1,10 s/ssh/SSH/g #跟进行数替换 将小写ssh替换成大写SSH(1、10 代表1到10行;s/代表替换;/代表全部)
v #可视模式(跟进左右键选中)
基础语法
bash -n text.sh #bash -n 检查shell文件是否有语法错误
bash -x text.sh #bash -x 查看带有+(执行的命令)以及 执行命令的结果,用于排查问题 (dug的意思)
#! /bin/bash #解释器,(解释器器将文件内容转换成二进制)
+加;-减;*乘;/除;%取模,计算数值相除后的余数;**乘方运算
-eq等于;-ne不等于;-gt大于;-lt小于;-le大于等于;-ge大于等于 #数字比较运算
==等于;!=不等于;-z检测字符串是否为空;-n检测字符串 是否不为空 #字符串比较运算
&&与;||或;!非 #逻辑运算
-d检测目录是否存在;-f检测文件是否存在;-e检测目录或文件是否存在;-r检查文件是否存在且可读;-w检查文件是否存在且可写;-x检查文件是否存在且可执行;-L是否为符合链接文件;-s检查文件是否存在且不为空;-O检查文件是否存在并且被当前用户拥有;-G检查文件是否存在并且默认组为当前用户组;file1 -nt file2检查file1文件是否比file2新;file1 -ot file2检查file1文件是否比file2旧 #文件运算
(()) #用于数学运算
[[]] #用于字符串匹配
echo $[$a+$b] # $[] 或者 $(()) 代表两个变量是要计算;
echo ${tt} #鉴定变量的名字
echo $(cat /root/ ) #执行括号里面的命令
echo $PATH #可执行的程序路径(大写的都是系统变量)
echo $HOME #当前用户的家目录(大写的都是系统变量)
echo $USER #当前用户的登入名称(大写的都是系统变量)
echo $UID #当前用户的UID(大写的都是系统变量)
echo $SHELL #当前用户使用的SHELL(大写的都是系统变量)
echo $HISTSIZE #当前用户的历史命令条数(大写的都是系统变量)
echo $PWD #当前用户的工作目录(大写的都是系统变量)
echo $LANG #查看系统字符编码
echo $? #查看上一次执行的命令成功还是失败(0成功;1到255的随机数是失败)
echo $# #传入参数的数量
echo $0 #当前脚本的名称
echo -n #-n不要在最后换行;-e对字符进行特殊处理(\a发出警告声;\b删除前一个字符;\c最后不加换行符;\f换行但光标仍旧停留在原来的位置;\n换行且光标移至行首;\r光标移至行首,但不换行;\t插入table;\v换行但光标仍旧停留在原来的位置;)
break #终止本循环(正常退出)
exit 1-255(1到255之间的任意数字,返回值) #退出程序(非正常退出)
continue #跳过本次循环
shift #向左偏移,将多个参数汇聚到第一个参数上
ALIST=('A' 'B' 'C' 'D') #定义一个数组
echo ${ALIST[3]} #获取下标3的内容
echo ${ALIST[@]} #获取数组中的所有内容
echo ${#ALIST[@]} #获取数组中的数量
echo ${!ALIST[@]} #获取数组中的索引(下标)
echo ${!ALIST[@]:2} #获取数组中的内容,从下标2开始
echo ${!ALIST[@]:2:4} #获取数组中的内容,从下标2开始获取4个内容
#脚本中参数位置用:$1,$2,$3,$4,$5,$6,$7,$8,$9 (共有9个参数)
[ -d $1 ] #判断输入的参数是否是一个目录(-d是否是目录;-f是否是文件;-e目录或文件是否存在;-r当前用户是否有读权限;-w当前用户是否有写权
# 限;-x当前用户是否有执行权限;-L是否为符合链接文件)
[ 1 -gt 2 ] #数字,判断1是否大于2 (-eq等于;-ne不等于;-gt大于;-lt小于;-le大于等于;-ge大于等于)
[ "aa" = "bb" ] #字符串,判断是否等于bb(=匹配;!=不匹配;-z检测字符串是否为空)
[ $USER = "root" -a $UID="0" ] #逻辑,判断当前用户等于root -a(与) 用户ID等于0(-a代表与; -o代表或; !代表非; )
[ $USER = "root" ] && "hello" # &&只有[]中的内容执行成功才会执行 &&后面的内容;||只有[]中的内容执行失败才会执行 || 后面的内容;
#判断语句(if)
if[]; then #if条件判断成功,执行then中的内容 (;代表前后命令连接,在一行执行)
elif[];then #elif条件判断成功,执行then中的内容
else #条件判断失败,执行该内容
fi #表示if语句结束
#判断语句(case)
read -p "请输入任意一个字符,并按回车键"key
case $key in #判断变量key输入的内容
[a-z]|[A-Z]) #判断输入的内容是否是字符
echo "输入英文字符" #如果输入的是字符,就执行该命令
;;
[0-9]) #判断输入的内容是否是数字
echo "输入的是数字" #如果输入的是数字,就执行该命令
;;
*) #上面的条件都不满足时,执行该命令
echo "输入的既不是字符也不是数字" #上面的条件都不满足时,执行该命令
esac #代表case语句结束
#for循环
for (( ;; )) #死循环
for (( i=1;i<10;i++ )) #输出10以内的数字
for f in {1..5} #将1到5的数字赋给变量f
do #输出
echo $f & #输出f的内容 (&后台执行,类似异步执行)
continue #跳过本次循环
done #循环结束
wait #等待(只有循环中的内容结束,才会执行下面的内容)
echo "结束"
#while循环
read -p "NUM: " key #输入数字
while [ $key -gt 10 ] #当输入的内容大于10
do
echo "您输入的内容大于10: $key"
sleep 3 #睡觉三秒
done #while结束
###################################日期和时间的命令###################################
date -d yesterday +%Y%m%d%H%m #获取前一天的日期和时间并格式化
crontab -e 星号的含义为: / 分 时 日 周 月 #linux的定时命令
*/1 * * * * sh /home/text.sh #每一分钟执行一次该文件(* 代表不不限时间)
text.txt.$(date +%F) #在文件上添加系统日期( $(date +%F) 格式:2021-10-31 )
hwclock #查看BIOS(硬件)时间 (出厂时间)
hwclock -W #按照date时间 修改BIOS(硬件)时间
hwclock -s #按照BIOS(硬件) 修改date时间
cal #显示日历 (cal 2021 :显示2021年的日历)
###################################系统命令#################################
cd ~(根目录); -(返回上一个目录);
!! #执行上一条命令
! #执行历史命令
echo
cat /proc/cpuinfo #查看CPU的详细信息
free -h #查看内存的使用情况(显示单位)
free -m #查看内存的使用情况(不显示单位 )
rm -r * #删除路径或者文件
crontab -e #查看定时文件
dos2unix 文件名 #将DOS文件转换成unix格式(liunx中执行的文件)
du -h --max-depth=1 #查看当前存储大小
du -sh 文件名 #查看文件大小(G级别)
df -h #查询磁盘使用率
df -hT #查询磁盘占用情况
du -hs /root #查看目录的大小
ll -h 文件名 #查看文件自身的大小
top #liunx查看CPU使用程度
halt #关机命令
uname -a #查看liunx版本
LANG=en #修改系统编码
lsb_release -a #查看系统版本
date +%s | sha256sum | base64 | head -c 32 ; echo #liunx随机生成密码
clear #liunx清空屏幕命令
netstat -ant | grep :1000 #查看是否开放1000端口
jobs -l #查看后台运行的任务
fg 后台运行的编号 #将后台运行的任务调到前端展示
nohup sh 文件名 日期>test.out & #后台运行
which ls #查询命令的安装路径
ln -s 源文件 目标路径 #创建软链接(将源文件 放到新(目标路径中))
alias ccc='cat /root/root' #定义别名(ccc是别名,后面的内容是别名要执行的命令)
history #查看历史命令
history -d id号 #删除历史中的命令
history -c #清空历史记录
pidof java #查看服务进程编号
ps aux | grep java #查看进程的详细信息
ps aux | sort -rnk 4 | head #查看占用内存最高的进程
ps -ef | more #查看所有进程
ps -ef | grep 进程号 #跟进进程号查看信息
ps -ef|grep nacos| grep -v grep |wc -l #查看集群启动数量(nacos为例)
ps -ef|grep 文件名 #查看liunx进程
sudo lsof -i tcp:端口号 #端口号是否占用
type cd #查看命令类型
rpm -qf /usr/bin/find #查看安装包的信息
read #让用户输入信息( 用法:-p "请输入内容" 变量名 )
seq 5 #输出1到5的数字
seq 2 5 #输出2到5的数字
seq 1 2 9 #按照2倍增加,输出1到9的数字
cut -d':' -f3 # 按照(:)分隔符,获取第三列内容( -d分割;-f指定的字段 )
ping -c 2 192.168.10.1 #查看IP是否正常(-c 2 给IP发两个包,就退出)
scp /home/test root@192.168.190.10:/home/test2/ #机器之间相互复制文件命令
netstat -lntp | grep 8080 #查看占用端口的服务信息
##################################用户权限######################
字符含义
用户:u所有者;g所属组;o其它用户;a所有用户;
操作:+增加;-删除;=设置权限;
权限:r读;w写;x执行;
chmod 设置权限
chmod -R 777 * #设置最高权限
chmode +x #修改权限命令
chmode a+x test.sh #给文件添加执行权限
##################################软件的安装##################################
cd /etc/yum.repo.d/ #存放yum元信息(属性)的文件
正则表达式
.. #代表任意的单个字符
.* #代表任意字符
r\? #代表r可有可无,只能出现一次
r\+ #代表r至少有一次
r\{2\} #代表r出现的次数(2随便写)
r\{1,5\} #代表r最少1次,最多5次
\d #代表任意数字 ,相当于[0-9]
\w #代表任意一个字母或者数字或者下划线
\. #以(.)点开头的任意文件
[0-9] #代表0到9的数字
=~ #判断变量值是否匹配对应的表达式 ,使用该符号时必须用 [[]] 该符号可不用转义符
grep -E "[0-9]{1,3}\." /root/text.sh #查询文件中有1到3个的数字,以点(.)结尾 (-E代表不用转义符)
文本操作命令
ll text.sh #查看文件
more 文件名 #查看文件(按照屏幕大小展示内容),查看到文件末尾会自动退出
less 文件名 #查看文件(按照屏幕大小展示内容),查看到文件末尾不会自动退出
sort file.txt | uniq -d #查询重复字段
sort file.txt | uniq -c #查询重复次数
wc 文件名 #统计文件内容(行数、单词数(包含换行符)、字节数)
wc -l 文件名 #统计文件内容的行数
echo 'hello word!' >hell.txt #输出内容到文件中
echo $LANG #查看系统编码
cat /proc/version #查看正在运行的内核版本
cat /etc/issue #查看发型版本信息
cat /etc/redhat-release #查询系统类型
cat -n #查看文件内容并有行号
head -5 #查看文件的前5行(默认10行)
tail -5 #查看文件的末尾5行(默认10行)
tail -f #查看实时内容
mv /test/ /home/test2/ #移动文件命令
find / -name 文件名 #查找文件
rpm -ivh test.rpm #安装rpm格式文件命令
rpm -e 软件名 --nodeps #删除安装的mysql命令
rpm -qa|grep -i mysql #查看是否安装mysql命令
touch text #创建空文件
rpm -qa | grep java #查看是否装有JDK
rmp -e --nodeps 包名 #卸载JDK
ln -sf /home/test/ /home #连接文件的命令
ln -s test/ test1 #创建软连接命令
ln -f test/ test1 #创建硬连接命令
ls -ld * #查看文件权限
ls -l #查看文件信息
ls -l #查看隐藏文件
ls -lrt #查看文件存储大小
ls -d #查看文件和目录名称(不文件显示内容)
ls -a #查看隐藏文件(所有文件)
grep -n "text" /home/hello.txt #在文件中查找 text (-n代表显示行号)
grep -n "^text" /home/hello.txt #在文件中查找以text开头的字符(-n代表显示行号)
grep -n "text$" /home/hello.txt #在文件中查找以text结尾的字符(-n代表显示行号)
grep -v "text" /home/hello.txt #在文件中查找不包含text的字符(-v 不包含)
grep -i "text" /home/hello.txt #在文件中查找text的字符(-i 不区分大小写)
grep -w "text" /home/hello.txt #在文件中查找text的字符(-w 精确匹配)
grep -r 'text' #在当期目录中查找text的字符(-r 目录中的所有文件)
grep -v "^#" /root | grep -v "^$" #查询文件中不是(-v)注释(^#)和不是(-v)空(^$)的内容
grep "s..n" /root/text.sh #查找文件中以s开头,以n结尾的内容 (..代表任意的单个字符)
grep "^[a-zA-Z0-9]" /root/text.sh #查找文件中已字符和数字开头的内容
grep "s.*n" /root/text.sh #查找文件中以s开头和n结尾的任意字符(.*代表任意字符)
grep "sr\?n" /root/text.sh #查找文件中中以s开头和n结尾的字符(\?代表r可有可无,该字符只能出现一次)
grep "sr\+n" /root/text.sh #查找文件中中以s开头,中间至少要有一个r,和n结尾的字符( \+ 代表至少有一次)
grep "sr\{2\}n" /root/text.sh #查找文件中中以s开头,中间有2个r,和n结尾的字符( \{2\} 代表r字符出现的次数)
grep "sr\{1,5\}n" /root/text.sh #查找文件中中以s开头,中间最少有1个,最多有5个r,和n结尾的字符( \{1,5\} 代表r字符最少1,最多5)
grep "^root" /root/text.sh | cut -d":" -f 2 #查找文件中以root开头的内容,按照:分割符,获取第二列的内容 (-d指定分隔符;-f挑选的字段)
mkdir -p /test/test2/test3 #创建多级文件命令
/bin/rm -rf 文件名 #彻底删除内容
diff a.txt b.txt #比较两个文件中的内容 (a代表增加;d代表删除;c代表修改)
# 12a13 比原有文件多了一行
# < hello 比原有文件多的内容(<代表a文件;>代表b文件)
#以上内容解释: b文件比a文件多了一行,多的内容是hello
stat 文件名 #查看文件的元数据(文件属性)
find [查找起始路径] [选项] [查找条件] [处理动作] #查找命令 (【】的内容可以不加)
find /root -name "text" #在root目录下按照文件名(-name)查找带有text
find /root -iname "text" #在root目录下按照文件名(-iname)查找带有text(忽略大小写)
find /root -empty #从root目录下查找空文件
find /root -type d #在root目录下按照类型(-tyep)查找目录(d)((f)或者(-)代表普通文件;d代表目录;l软连接;b块设备;c字符设备)
find /root -size +1M #在root目录下按照文件大小(-size)查找 (- 代表小于;+ ====代表大于;k;M;G)
find /root -ctime -1 #查询root目录下一天前修改的内容
find /root -name "*.txt" -exec cp {} /root \ #在root目录下按照文件名字匹配,并将匹配的文件复制到另外一个目录下
find /root -name "*.txt" | wc -l #在root目录下按照文件名字匹配,获取匹配的数量
find /root -name "*.txt" -exec grep "hello" {} \ #在root目录下按照文件名字匹配,并查找文件中查找hello的内容(不显示文件名)
find /root -name "*.txt" | xargs grep "hello" #在root目录下按照文件名字匹配,并查找文件中查找hello的内容(显示文件名)
locate text #查找text文件 (该命令需要查找索引数据库,该命令找不到刚创建的文件)
chattr -i /root/text.sh #删除文件的只读权限
chattr -R +i /root/ #设置root下所有文件只读权限(-R代表所有)
lsattr -d /root/ #查看文件是否只读
sort #对文本文件排序 (以行为单位,从每行的首字母开始按照ASII码值的大小依次排序)
sort -r /root/text.sh #对文件内容降序排序(-r 降序)
sort -t":" -k2 -n /root/text.sh #以:分割,从第2列排序 (-t分割;-k指定字段;-n必须是数字;)
sort -f /root/text.sh #对文本文件排序(-f忽略大小写)
sort -u /root/text.sh #对文本文件排序(-u去重复的行,对于重复的行只保留一份)
sed '1,10d' /root/text.sh #不输出1到10行的内容(1,10d数据是行数,d是删除)
sed '/^U/d' /root/text.sh ##不输出以U开头的内容(\^U\ 双斜杠是正则,^是开头)
sed '/^$/d' /root/text.sh ##不输出空白行(^$是空行)
sed -i 'd' /root/text.sh #清空文件内容(-i操作原文件)
sed -n '/^U/w /root/text.sh' /root/text1.sh #将text1.sh文件中以U开头的内容存到text.sh中(-n不输出 w是存储)
sed 's/root/admin/g' /root/text.sh #将text.sh文件中的root替换成admin (s是编辑;g是替换 )
awk '{print $1,$3}' /root/text.sh ##查找text.sh文件中第一和第三列的内容 并在列中间添加*(默认的分隔符是空格)
awk -F":" '{print $3}' /root/text.sh #查找text.sh文件中第三列的内容(-F":"按照:分割)
awk -F"[ :]+" '{print $3}' /root/text.sh #查找text.sh文件中第三列的内容(-F"[ :]+" 以空格或者:分割,+是任意一个)
tail -1 /root/text.sh | awk -F":" '{print NF}' #查找text.sh文件中最后一行,以:分割的列的数量(NF列的数量)
tail -1 /root/text.sh | awk -F":" '{print $NF}' #查找text.sh文件中最后一行,以:分割的最后一列内容($NF是最后一列)
tail /root/text.sh | awk -F":" 'NR==3{print $1,$3}' #查找text.sh文件中第三行的第一列和第三列的内容(NR是行号)
awk -F":" 'OFS="#"{print $1,$3}' /root/text.sh #查找text.sh文件中的第一列和第三列的内容,已#分割(OFS="" 显示内容的分隔符)
awk 'BEIN{print "*****"}{print $0}END{"----"}' /root/text.sh #在输出内容前添加*,在输出内容后添加- (BEIN开始前,END结束后,$0输出的内容)
压缩包命令
rz -ry; #上传小文件
rz -bye; #上传大文件
sz #下载;
tar -cvf text.tar /root/ #将root目录下的文件打包成text.tar(只是打包不压缩)
tar -zcvf text.tar.gz /root/ #将root目录下的文件压缩并打包成text.tar(z用gzip打包;j用bzip2打包;J用xz打包)
tar -xvf text.tar #解压不压缩的文件
tar -zxvf text.tar.gz -C /tmp #解压用z打包的文件,并放到/tmp目录下 (-C是指定目录)(z用gzip打包;j用bzip2打包;J用xz打包)
zip 文件名 要压缩的文件名 #压缩文件zip包
unzip 文件名 #解压zip包
unzip filename.zip #解压zip包