Linux常用命令总结3

linux命令查询网址:https://www.linuxcool.com/

B站兄弟连Linux视频教程学习笔记

shell脚本

shell概述:图1~图4
Linux中支持的shell:/etc/shells
=====================================================================================
shell脚本的执行方式

echo输出命令:
echo [选项] [输出内容]
-e:支持反斜线控制的字符转换,图5
echo -e "ab\bc":输出ac
echo -e "a\tb\tc\nd\te\tf":输出结果,把abcdef按制表符并换行输出
a   b   c
d   e   f
echo -e "\e[1;31m abcd\e[0m":输出红色的abcd
30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,37m=白色

脚本执行:
图6、图7

dos2unix 脚本文件名:将dos命令转换为unix命令
=====================================================================================
bash的基本功能

历史命令:
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
历史命令可以使用上下箭头调用,使用!n重复执行第n条历史命令,使用!!重复执行上一条历史命令,使用!字串,重复执行最后一条以该字串开头的命令

history [选项] [历史命令保存文件]
-c:清空历史命令
-w:把缓存中的历史命令写入历史命令保存文件中。~/.bash_history

命令与文件补全:
在bash中,命令与文件补全是非常方便与常用的功能。只要在输入命令或文件时,按“Tab”键就会自动进行补全

命令别名与常用快捷键:优先级见图8
alias 别名='原命令':设定命令别名
unalias 别名:删除别名
alias:查询命令别名
vim /家目录/.bashrc:让别名永久生效

bash常用快捷键:图9

输入输出重定向:图10~图12
输出重定向:
命令 > 文件:以覆盖的方式把命令的正确输出输出到指定的文件或设备当中
命令 >> 文件:以追加的方式把命令的正确输出输出到指定的文件或设备当中
错误命令 2> 文件:以覆盖的方式把命令的错误输出输出到指定的文件或设备当中
错误命令 2>> 文件:以追加的方式把命令的错误输出输出到指定的文件或设备当中

命令 > 文件 2>&1:以覆盖的方式把正确输出和错误输出都保存到同一文件当中
命令 >> 文件 2>&1:以追加的方式把正确输出和错误输出都保存到同一文件当中
命令 &> 文件:以覆盖的方式把正确输出和错误输出都保存到同一文件当中
命令 &>> 文件:以追加的方式把正确输出和错误输出都保存到同一文件当中
命令 >> 文件1 2>> 文件2:把正确的输出追加到文件1中,把错误输出追加到文件2中

输入重定向:
wc [选项] [文件名]:
-c:统计字节数
-w:统计单词数
-l:统计行数
命令 < 文件:把文件作为命令的输入
wc -l < index.js:统计index.js文件的行数

多命令顺序执行:图13
命令1 ; 命令2:命令1执行完执行命令2,之间没有联系
命令1 && 命令2:命令1执行正确才会执行命令2
命令1 || 命令2:命令1执行正确不会执行命令2.命令1执行失败才会执行命令2
命令 && echo yes || echo no:命令正确执行就输出yes,没有正确执行就输出no

管道符:
命令1 | 命令2:把命令1的正确输出作为命令2的操作对象
ll -a /etc/ | more:将ll -a /etc/的结果分屏显示
netstat -an | grep "ESTABLISHED":查询所有网络连接中包含"ESTABLISHED"高亮显示

通配符:图14
rm -rf *:删除当前目录下的所有文件
ls ?abc:查看2到4位置是abc的文件
ls [0-9]*:查看所有数字开头的文件
ls [^0-9]*:查看所有不是数字开头的文件

其他特殊符号:图15
echo '$(date)':输出$(date)
echo "$(date)":输出系统当前时间
=====================================================================================
bash变量:图16~图18

用户自定义变量:
name="shan chao":定义变量name
echo $name:输出变量值
aa=123:定义变量aa
aa="$aa"456:aa的变量值叠加后值为123456
aa=${aa}789:aa的变量值叠加后值为123456789
set:查看所有变量
unset name:删除name变量

环境变量:图19
pstree:可以查看当前shell的层级
export 变量名=变量值:申明变量
env:查询环境变量
unset 变量名:删除变量

PATH环境变量:图20

PS1环境变量:图21、图22
PS1='[\u@\t \w]\$ '
PS1='[\u@\@ \h \# \W]\$ '
PS1='[\u@\h \W]\$ '

位置参数变量:
图23~图25

预定义变量:
图26~图27

接收键盘输入:图28
read [选项] [变量名]
-p "提示信息":在等待read输入时,输出提示信息
-t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数:read命令只接收指定的字符数,就会执行
-s:隐藏输入的数据,适用于机密信息的输入
=====================================================================================
bash运算符

数值运算与运算符:
declare [+/-] [选项] 变量名:声明变量类型
-:给变量设定类型属性
+:取消变量的类型属性
-i:将变量声明为整数型(integer)
-x:将变量声明为环境变量
-p:显示指定变量的被声明的类型
aa=11
bb=22
declare - -i cc=$aa+$bb:将aa变量声明为integer类型,结果为33

使用expr或let数值运算工具:
aa=11
bb=22
dd=$(expr $aa + $bb):dd的值为33,注意“+”两边必须有空格

使用$(())或$[运算式]:
aa=11
bb=22
ff=$(($aa+$bb)):ff的值为33
gg=$[$aa+$bb]:gg的值为33

运算符:
图29、图30

变量测试与内容替换:
图31、图32
=====================================================================================
环境变量配置文件:图33
source 配置文件:让环境变量配置文件生效,或者是 . 配置文件

系统中环境变量配置文件
/etc/profile:
作用:定义了USERLOGNAME、MAIL、PATHHOSTNAMEHISTSIZE、umask、调用/etc/profile.d/*.sh文件
/etc/profile.d/*.sh:
~/.bash_profile:
作用:调用了~/.bashrc文件,在PATH变量后面加入了“:$HOME/bin”这个目录
~/.bashrc:
作用:定义了一些系统别名,调用了/etc/bashrc文件
/etc/bashrc:
作用:定义了登录提示符PS1变量、umask、PATH变量,这些变量针对不需要登录的用户使用。调用/etc/profile.d/*.sh文件

etc目录下的环境变量对所有用户都生效,剩下两个对当前用户生效
调用顺序:图34

其他环境变量配置文件:
~/.bash_logout:注销时生效的环境变量配置文件,默认是空的
~/.bash_history:历史命令保存文件
/etc/issue:本地终端登录前欢迎信息,图35
/etc/issue.net:远程终端登录前欢迎信息,图36
/etc/motd:本地和远程终端登录都生效,登录后的欢迎信息
=====================================================================================
正则表达式:图37

基础正则表达式:图38
*:前一个字符匹配0次或任意多次
.:匹配除了换行符外任意一个字符
^:匹配行首。例如^hello会匹配以hello开头的行
$:匹配行位。例如$hello会匹配以hello结尾的行
[]:匹配括号中指定的任意一个字符,只匹配一个字符。例如:[aoeiu]匹配任意一个元音字母,[0-9]匹配任意一个数字,[a-z][0-9]匹配小写字母和一位数字构成的两位字符
[^]:匹配除中括号的字符以外的任意一个字符。例如:[^0-9]匹配任意一个非数字的字符,[^a-z]匹配任意一位非小写字母
\:转义符。用于将特殊符号的含义取消
\{n\}:表示其前面的字符恰好出现n次。例如:[0-9]\{4\}匹配4位数字,[1][3-8][0-9]\{9\}:匹配手机号码
\{n,\}:表示其前面的字符出现不小于n次,例如:[0-9]\{2,\}表示两位及以上的数字
\{n,m\}:表示其前面的字符至少出现n次,最多出现m次,例如:[a-z]\{6,8\}匹配6到8位小写字母

grep "a*" test.txt:匹配所有内容,包括空白行
grep "aa*" test.txt:匹配至少包含一个a的行
grep "aaa*" test.txt:匹配最少包含两个连续a的字符串所在行
grep "aaaaa*" test.txt:匹配最少包含四个连续a的字符串所在行

grep "s..d" test.txt:匹配在s和d两个字母之间一定有两个字符的单词所在行
grep "s.*d" test.txt:匹配在s和d之间有任意字符所在行

grep "^M" test.txt:匹配所有M开头的行
grep "n$" test.txt:匹配以n结尾的行
grep -n "^$" test.txt:匹配空白行

grep "s[ao]id" test.txt:匹配s和i字母中,要么是a,要么是o
grep "[0-9]" test.txt:匹配任意一个数字所在行
grep "^[a-z]":匹配用小写字母开头的行
grep "^[^a-z]" test.txt:匹配不是小写字母开头的行
grep "^[^a-zA-Z]":匹配不是字母开头的行

grep "\.$" test.txt:匹配使用.结尾的行

grep "a\{3\}" test.txt:匹配a字母连续出现三次的字符串所在行
grep "[0-9]\{3\}" test.txt:匹配包含连续三个数字的字符串所在行

grep "^[0-9]\{3,\}[a-z]" test.txt:匹配最少以三个数字开头的所在行

grep "sa\{1,3\}i" test.txt:匹配在字母s和i之间最少有一个a最多有三个a的字符串所在行
=====================================================================================
字符截取命令:
cut:字段提取
cut -f 列号 文件名:提取文件的第几列
cut -d 分隔符 文件名:按照指定分隔符分割列
cut -f 2 student.txt:提取第二列
cut -f 2,4 student.txt:提取第二列和第四列
cut -d ":" -f 1,3 student.txt:以:为列的分隔符,提取第一列和第三列
cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1:提取系统中所有普通用户的用户名
注意:cut命令识别列时必须是制表符,或者-d指定分隔符,这也是cut的局限性

printf:格式化打印,图39
printf '输出类型输出格式' 输出内容:
输出类型:
%ns:输出字符串。n是数字指代输出几个字符
%ni:输出整数。n是数字指代输出几个数字
%m.nf:输出浮点数。m和n是数字,指代输出的正数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位是整数
输出格式:
\a:输出警告声音
\b:输出退格键,也就是backspace键
\f:清除屏幕
\n:换行
\r:回车,也就是enter键
\t:水平输出退格键,也就是tab键
\v:垂直输出退格键,也就是tab键

printf %s 1 2 3 4 5 6:输出123456
printf %s %s %s 1 2 3 4 5 6:输出%s%s123456
printf '%s %s %s' 1 2 3 4 5 6:输出1 2 34 5 6,将字符串以‘a b c’这样的形式为一组打印
printf '%s %s %s\n' 1 2 3 4 5 6:输出
1 2 3
4 5 6
printf '%s' $(cat student.txt):将student.txt文件内容格式化打印

awk命令:图40
awk '{printf $2 "\t" $6 "\n"}' student.txt:输出文件的第二列和第六列,$n表示第n列,没有条件时说明条件恒成立
df -h | awk '{print $1 "\t" $3}':打印磁盘使用率,awk中可以使用print

awk 'BEGIN {printf "This is a transcript\n"} {printf $2 "\t" $6 "\n"}' student.txt:在所有命令执行前,先执行BEGIN后面的执行语句,即先打印This is a transcript,并换行,再格式化打印student文件的第二列和第六列
awk 'BEGIN {FS=":"} {print $1 "\t" $3}' /etc/passwd:FS是指定分隔符,如果不加BEGIN,那么第一行不会以:分割输出

awk 'END {printf "The End\n"} {printf $2 "\t" $6 "\n"}' student.txt:格式化输出完打印The End

cat student.txt | grep -v Name | awk '$6 >= 87 {printf $2 "\n"}':如果第六列的每个数据大于等于87,格式化打印

sed命令:图41
sed [选项] '动作' 文件名
选项:
-n:一般sed命令会把所有数据都输出到屏幕,如果加上-n,只会把经过sed命令处理的行输出的屏幕
-e:允许对输入数据应用多条sed命令编辑
-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
a\:追加,在当前行后添加一行或多行,添加多行时,除最后一行外,每行末尾需要用"\"代表数据未完结
c\:行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用“\”代表数据未完结
i\:插入,在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾需用“\”代表数据未完结
d:删除,删除指定的行
p:打印,输出指定的行
s:字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”

sed '2p' student.txt:输出文件的第二行,再把整个文件再输出一遍
sed -n '2p' student.txt:只输出文件的第二行

df -h | sed -n '2p':查看df -h执行后的第二行内容

sed '2,4d' student.txt:删除第二行到第四行的数据,但是不修改文件本身
sed '2a hello' student.txt:在第二行后追加hello,不修改文件本身
sed '2i hello \world' student.txt:在第二行前插入两行数据,不修改文件本身
sed '2c No such person' student.txt:第二行替换为No suchn person,不修改文件本身
sed '2s /74/99/g' student.txt:在第二行中,将74替换为99,不修改文件本身

sed -i '2s /74/99/g' student.txt:在第二行中,将74替换为99,修改文件

sed -e 's/Liming//g ; s/Gao//g' student,txt:整个文档同时把Liming和Gao提换为空,不修改文件本身
=====================================================================================
字符处理命令:
sort [选项] 文件名
-f:忽略大小写
-n:以数值型进行排序,默认使用字符串型排序
-r:反向排序
-t:指定分隔符,默认分隔符是制表符
-k n,m:按照指定的字段范围排序,从第n字段开始,m字段结束。默认到行尾

sort /etc/passwd:按字母顺序给文件内容排序
sort -r /etc/passwd:按字母反向顺序给文件内容排序
sort -t ':' -k 3,3 /etc/passwd:指定分隔符:,用第三个字段开头,第三个字段结尾排序,就是只用第三个字段进行排序

wc [选项] 文件名
-l:只统计行数
-w:只统计单词数
-m:只统计字符数
=====================================================================================
条件判断式
test [选项] 文件名: 或者使用 [ [选项] 文件名 ],先用中括号括起来,选项前有一个空格,文件名后有一个空格
执行完可以通过echo $? 查看上一条命令是否执行正确
-b:判断该文件是否存在,并且是否为块设备文件
-c:判断文件是否存在,并且是否为字符设备文件
-d:判断文件是否存在,并且是否为目录文件
-e:判断文件是否存在
-f:判断文件是否存在,并且是否为普通文件
-L:判断文件是否存在,并且是否为符号链接文件
-p:判断文件是否存在,并且是否为管道文件
-s:判断文件是否存在,并且是否非空
-S:判断文件是否存在,并且是否为套接字文件
[ -d /root ] && echo 'yes' || echo 'no':第一个判断命令如果正确执行,则打印yes,否则打印no

按照文件权限进行判断
-r:判断文件是否存在,并且是否文件拥有读权限
-w:判断文件是否存在,并且是否文件拥有写权限
-x:判断文件是否存在,并且是否文件拥有执行权限
-u:判断文件是否存在,并且是否文件拥有SUID权限
-g:判断文件是否存在,并且是否文件拥有SGID权限
-k:判断文件是否存在,并且是否文件拥有SBIT权限

两个文件之间进行比较
文件1 -nt 文件2:判断文件1的修改时间是否比文件2的新
文件1 -ot 文件2:判断文件1的修改时间是否比文件2的旧
文件1 -ef 文件2:判断文件1是否和文件2的inode号一致,可以理解为两个文件是否为同一个文件,用于判断硬链接是很好的方法

两个整数之间进行比较
整数1 -eq 整数2:判断整数1是否和整数2相等
整数1 -ne 整数2:判断整数1是否和整数2不相等
整数1 -gt 整数2:判断整数1是否大于整数2
整数1 -lt 整数2:判断整数1是否小于整数2
整数1 -ge 整数2:判断整数1是否大于等于整数2
整数1 -le 整数2:判断整数1是否小于等于整数2

字符串的判断
-z:判断字符串是否为空
-n:判断字符串是否非空
字串1 == 字串2:判断字符串1是否和字符串2相等
字串1 != 字串2:判断字符串1是否和字符串2不相等
name=sc
[ -z '$name' ] && echo 'yes' || echo 'no'

多重条件判断
判断1 -a 判断2:逻辑与,判断1和判断2都成立,为真
判断1 -o 判断2:逻辑或,判断1和判断2有一个成立,为真
! 判断:取反,注意空格
aa=24
[ -n $aa -a $aa -gt 23 ] && echo yes || echo no:输出yes
=====================================================================================
if语句
单分支if条件语句
if [ 条件判断式 ];then
  程序
fi
或者
if [ 条件判断式 ]
  then
    程序
fi

注意:
if语句使用fi结尾,和一般语言使用大括号结尾不同;
[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格;
then后面跟符合条件之后执行的程序,可以放在[]之后,用;分割。也可以换行写入,就不需要;了。
例子:判断分区使用率,注意每个shell脚本的第一行必须声明:#!/bin/bash
#!/bin/bash
rate=$(df -h grep '/dev/sda3' | awk '{print $5}' | cut -d '%' -f 1):把分区使用率作为变量值赋予变量rate
if [ $rate -ge 80 ];then
  echo 'warning! /dev/sda3 is full !!!'
fi

双分支if条件语句:图42
if [ 条件判断式 ]
  then
    程序
else
  程序
fi

多分支if语句
if [ 条件判断式 ]
  then
    程序
elif [ 条件判断式 ]
  then
    程序
else 
  程序
fi
=====================================================================================
case语句:
case语句和if语句一样都是多分支条件语句,不过不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系
case $变量名 in 
  '值1')
      程序
      ;;
  '值2')
      程序
      ;;
  *)
    程序
    ;;
esac
=====================================================================================
for循环:
格式1:不确定循环次数
for 变量 in 值1 值2 值3...
  do
    程序
  done
  
例子:打印时间
#!/bin/bash
for time in morning noon agternoon evening
  do
    echo $time
  done

例子:批量解压缩脚本
#!/bin/bash
cd /lamp
ls *.tar.gz > ls.log
for i in $(cat ls.log)
  do
    tar -zxf $i &> /dev/null
  done
rm -rf /lamp/ls.log

格式2:确定循环次数
for (( 初始值; 循环控制条件; 变量变化))
  do
    程序
  done

例子:从1加到100
#!/bin.bash
s=0;
for (( i=1; i<=100; i=i+1))
  do
    s=$(( $s+$i ))
  done
echo $s
=====================================================================================
while循环:
while [ 条件判断式 ]
  do
    程序
  done

例子:从1加到100
#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
  do
    s=$(( $s+$i ))
    i=$(( $i+1 ))
  done
echo $s
=====================================================================================
until循环:
与while循环相反,until循环时只要条件判断式不成立则进行循环,一旦循环条件成立则终止循环
until [ 条件判断式 ]
  do
    程序
  done

例子:从1加到100
#!/bin/bash
s=0
i=1
until [ $ -gt 100 ]
  do
    s=$(( $s+$i ))
    i=$(( $i+1 ))
  done
echo $s

图1:
在这里插入图片描述
图2:
在这里插入图片描述
图3:
在这里插入图片描述
图4:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图5:
在这里插入图片描述
图6:
在这里插入图片描述
图7:
在这里插入图片描述
图8:
在这里插入图片描述
图9:
在这里插入图片描述
图10:
在这里插入图片描述
图11:
在这里插入图片描述
图12:
在这里插入图片描述
图13:
在这里插入图片描述
图14:
在这里插入图片描述
图15:
在这里插入图片描述
图16:
在这里插入图片描述
图17:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图18:
在这里插入图片描述
图19:
在这里插入图片描述
图20:
在这里插入图片描述
图21:
在这里插入图片描述
图22:
在这里插入图片描述
图23:
在这里插入图片描述
图24:
在这里插入图片描述
图25:
在这里插入图片描述
图26:
在这里插入图片描述
图27:
在这里插入图片描述
图28:
在这里插入图片描述
图29:
在这里插入图片描述
图30:
在这里插入图片描述
图31:
在这里插入图片描述
图32:
在这里插入图片描述
图33:
在这里插入图片描述
图34:
在这里插入图片描述
图35:
在这里插入图片描述
图36:
在这里插入图片描述
图37:
在这里插入图片描述
图38:
在这里插入图片描述
图39:
在这里插入图片描述
图40:
在这里插入图片描述
图41::
在这里插入图片描述
图42:
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值