shell命令汇总

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包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值