Linux常用基础命令
1、时间戳添加
a、date +%F 显示年-月-日
date +%w 显示周几
[root@centos74-ren ~]# Date=$(date +%F-%w)
[root@centos74-ren ~]# echo $Date ----2020-07-31-5 2020年7月31日周五
b、 date +%T 显示时间 时:分:秒
[root@centos74-ren ~]# date +%T ---23:17:22
c、date +%Y%m%d-%H:%M 显示年月日时分
[root@centos74-ren ~]# Date=`date +%Y%m%d-%H:%M`
[root@centos74-ren ~]# echo $Date ---20200731-23:15
2、$(命令)==`命令`
[root@centos74-ren ~]# a=$(uname -r)
[root@centos74-ren ~]# echo $a ---3.10.0-1062.12.1.el7.x86_64
[root@centos74-ren ~]# unset a
[root@centos74-ren ~]# a=`uname -r`
[root@centos74-ren ~]# echo $a ---3.10.0-1062.12.1.el7.x86_64
3、tar命令压缩
a、压缩过程报resolve failed
[root@centos74-ren0730 ~]# tar -zcvf 20200731-12:05.tar.gz 20200731-2305-5-23\:05\:01.md5
tar (child): Cannot connect to 20200731-12: resolve failed
是因为20200731-12:05.tar.gz这里面包含":",参数后面加上--force-loca
[root@centos74-ren0730 ~]# tar -zcvf 20200731-12:05.tar.gz 20200731-2305-5-23\:05\:01.md5 --force-loca
4、sh与bash\source与.\绝对路径\相对路径
sh与bash\source与.\绝对路径\相对路径都可以执行*.sh脚本
a、sh与bash一样,sh是bash的链接文件,sh与bash执行脚本,脚本有没有执行权限都可以
b、source与.执行脚本,脚本有没有执行权限都可以
source *.sh或者. *.sh
c、绝对路径与相对路径,脚本要有执行权限
绝对路径:/root/2.sh
相对路径:进入脚本所在路径 ./2.sh
sh与bash等价,source与.等价;用source执行脚本文件,执行过程不另开进程,脚本文件中设定的变量在当前shell中可以看到;
用sh执行脚本文件,是在当前进程另开子shell进程来执行脚本命令,脚本文件中设定的变量在当前shell中不能看到;
若想实现父子shell的相互调用就要用source执行,相当于放在同一个shell下执行
在user.sh写了一个脚本并且自定义了一个变量;用4.sh去调用user.sh脚本;发现在4.sh中分别用source与sh执行user.sh,结果不一样,要想实现父子shell的相互调用就在调用脚本的时候要用source执行。
5、定义变量内容,不加引号、单引号、双引号、反引号结果
a、不加引号直接定义变量内容:适用简单连续的数字、字符串、路径名时。不连续的就不行
b、通过单引号定义变量内容:单引号里是什么就输出什么,内容中有变量和命令(类似 `ls`)也会原样输出。比较适合于定义显示纯字符串的情况(包含不连续的字符串),即不希望解析变量、命令等。
c、通过双引号定义变量内容:输出变量内容时引用的变量及命令会经过解析后再输出内容,而不是把双引号的变量名及命令原样输出。比较适合于字符串中附带有变量及命令且想将其解析后再输出的变量定义。
d、通过反引号定义变量内容:返回的是命令执行的结果作为待赋值的变量的值
数字内容以及连续的字符的变量定义可以不加引号,其他没有特别要求的字符串等定义最好都加上双引号,如果真的需要原样输出就加单引号。
6、整数运算特殊符号或命令,以及适合小数运算的命令
(())、let、expr、$[]四种都应用于整数运算
bc、awk适用于小数
7、特殊变量对应的意义及应用
$0:获取脚本的名字,sh+脚本名字或者绝对路径,显示的就是脚本名字或路径带脚本名字
$n:$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
$#:添加到Shell的参数个数
$*:获取当前shell脚本所有传参的参数,所有参数视为单个字符串
$@:获取当前shell脚本所有传参的参数,所有参数视为不同的字符串
$?:上一个指令执行的状态码,返回为0成功
$$:返回当前shell的进程号
$!:获取上一个在后台工作的进 程的进程号
$_:获取在此之前执行的命令或脚本的最后一个参数
8、[root@centos74-ren-m etc]#解释
root:当前登录用户
@:占位符,无实际意义
centos74-ren-m:当前主机名字
etc:当前所在目录
[root@centos74-ren-m ~]#
~:/root/目录下
9、ls命令
-r:reverse 逆序排序,加-r按时间先后顺序,从早到最近更新(递增)
-t:根据修改时间排序
-d:只显示文件本身的信息,不输出其文件夹下具体内容
-F:在不同文件结尾,输出不同的特殊符号
/结尾就是文件目录
*结尾就是可执行文件
@结尾就是软链接,快捷方式
普通文件就是什么都没有
10、解压缩RAR文件
官网下载页面:https://www.rarlab.com/download.htm
a、wget -c https://www.rarlab.com/rar/rarlinux-x64-5.5.0.tar.gz
b、tar -xzvf rarlinux-x64-5.5.0.tar.gz && cd rar
c、make && make install
d、压缩:rar a all(rar文件名) *(要压缩文件)
e、解压:unrar e 文件名 (unrar e 1.rar)
11、ps -elf | grep ssh 与ps -elf | grep [s]sh区别
ps -elf | grep ssh执行时是由下面的ps进程,ps -elf | grep [s]sh没有ps的进程,类似grep -v grep
0 S root 1544 1470 0 80 0 - 28179 pipe_w 14:06 pts/0 00:00:00 grep --color=auto ssh
12、写出下面特殊变量扩展的意义
${oldboy}、${#oldboy}、${oldboy:offset:length}、${oldboy#word}、${oldboy##word}、${oldboy%word}、${oldboy%%word}、${oldboy/pattern/string}、${oldboy//pattern/string}、${oldboy:-word}
${oldboy} oldboy变量
${#oldboy} 变量的字符个数
${oldboy:offset:length} 从offset的位置截取,截取长度为lenth的值
${oldboy#word} 从变量内容的开头 删除含word的第一个字符
${oldboy##word} 从变量内容的开头 删除含word的全部字符
${oldboy%word} 从变量内容的尾部 删除含word的第一个字符
${oldboy%%word} 从变量内容的尾部 删除含word的全部字符
${oldboy/pattern/string} 对变量内容把第一个pattern替换为符合string
${oldboy//pattern/string}对变量内容把全部pattern替换为符合string
${oldboy:-word} 如果oldboy内容不存在,则使用word来替换,只是临时赋值,变量还是空
oldboy='i am a boy'
13、在条件测试与表达式中,[]和[[]]有何区别
当只有一个测试条件时,单括号和双括号是等价的,此时没有任何区别
[ -f /etc/fstab ] && echo "yes" || echo "no"
[[ -f /etc/fstab ]] && echo "yes" || echo "no"
不同点一:当存在多个测试条件时,单括号和双括号语法格式是有区别的,区别如下:
单括号中,判断条件1和判断条件2之间只能使用-a(与)、-o(或),不能使用&&和||
num1=10 #定义变量num1,赋值为10
[ -f /etc/fstab -a $num1 -gt 0 ] && echo yes || echo no
[ -f /etc/fstab && $num1 -gt 0 ] && echo yes || echo no
双括号中,和单括号正好相反,判断条件1和判断条件2只能使用&&和||,不能使用-a和-o
[root@centos74-ren shell_test]# [[ -f /etc/fstab && $num1 -gt 0 ]] && echo yes || echo no
[root@centos74-ren shell_test]# [[ -f /etc/fstab -a $num1 -gt 0 ]] && echo yes || echo no
[ $num1 -eq $num2 ] -----num1和num2相等,则为真
[ $num1 -ne $num2 ] -----num1和num2不相等,则为真
[ $num1 -gt $num2 ] -----num1大于num2,则为真
[ $num1 -lt $num2 ] -----num1小于num2,则为真
[ $num1 -ge $num2 ] -----num1大于等于num2,则为真
[ $num1 -le $num2 ] -----num1小于等于num2,则为真
> ----使用大于号
>= ----使用大于等于号
< ----使用小于号
<= ----使用小于等于号
!= ----使用不等于号
== ----使用等于号
单括号中,只能使用-eq、-ne、-gt、-lt、-ge、-le,不能使用>、>=、<、<=、!=、==符号,例如下面的例子:
num1=100
num2=200
[ $num1 -gt $num2 ] && echo yes || echo no
[ $num1 > $num2 ] && echo yes || echo no
结论:在单括号中,务必使用-gt、-lt、-eq、-le、-ge和-ne进行数值大小比较,避免使用>、>=、<、<=、!=、==符号进行数值大小比较,尽管有些情况下是正确的,说明不准确。
双括号中,既可以使用-gt、-lt、-eq、-le、-ge和-ne进行数值大小比较,也可以使用>、<、!=、==符号进行数值大小比较。当使用>=和<=时,报“条件表达式中有语法错误”。 但可以在双括号(( ))中使用
14、说出适合在[]以及test中整数比较的特殊运算符号
[]和test:-ne、-eq、-lt、-gt、-le、-ge
[root@centos74-ren shell_test]# num1=100
[root@centos74-ren shell_test]# num2=200
[root@centos74-ren shell_test]# [ $num1 -ne $num2 ] && echo yes || echo no
yes
[root@centos74-ren shell_test]# test $num1 -eq $num2
[root@centos74-ren shell_test]# echo $?
1
[root@centos74-ren shell_test]# test $num1 -lt $num2
[root@centos74-ren shell_test]# echo $?
0
[root@centos74-ren shell_test]# test $num1 -gt $num2
[root@centos74-ren shell_test]# echo $?
1
15、整数运算特殊符号或命令,以及适合小数运算的命令
(())、let、expr、$[]四种都应用于整数运算
bc、awk适用于小数
16、find与exec\xargs结合
find /PATH -name "*.h"
2. 查找所有".h"文件中的含有"helloworld"字符串的文件;;exec与xargs功能一样,只不过用法不一样
find ./ -type f -name "*.yml" | xargs grep "rebalance " -A 4
find /PATH -name "*.h" -exec grep -in "helloworld" {} \; #{} \必须有的
find /PATH -name "*.h" | xargs grep -in "helloworld"
3. 查找所有".h"和".c"文件中的含有"helloworld"字符串的文件
find /PATH /( -name "*.h" -or -name "*.c" /) -exec grep -in "helloworld" {} \;
4. 查找非备份文件中的含有"helloworld"字符串的文件
find /PATH /( -not -name "*~" /) -exec grep -in "helloworld" {} \;
注:/PATH为查找路径,默认为当前路径。带-exec参数时必须以\;结尾,否则会提示“find: 遗漏“-exec”的参数”。
find ~ -type f | xargs ls -
egrep '123|abc' filename // 用egrep同样可以实现
awk '/123|abc/' filename // awk 的实现方式
怎么查看文件是否有软连接:
1、进到该目录下执行: ls -all
2、file 文件名:
ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Ethernet"
PERSISTENT_DHCLIENT="yes"