历史命令
查看历史命令
# history
# cat /root/.bash_history
查看历史命令总个数
# echo $HISTSIZE
修改历史命令的总个数
# vim /etc/profile
HISTSIZE=1000
# source /etc/profile
清空历史命令
# history -c
开机登陆系统清除原有的历史命令
# vim ~/.bash_logout
history -c
依次使用上一次历史命令,在远程终端有可能不好用,在本地可用
Alt+.
!号加上历史命令使用数或关于历史命令的相关字符
# history
# !13
# !clea
别名
查看别名
# alias
临时定义别名
# alias 命令='命令集合' //是单引,非双引
永久定义别名
# vim .bashrc
取消别名
# unalias 命令
以红色显示要匹配的行
# cat /etc/passwd | grep --color root
举例
把命令改成我们希望的样子,例如我觉得每次输入head太麻烦,我可以用h代替head
[root@localhost /]# alias h=head
[root@localhost /]# h file
需要注意的是,定义带选项的变量的时候,需要加引号
[root@localhost /]# alias h="head -2"
[root@localhost /]# h file
取消别名用unalias
[root@localhost /]# unalias h
[root@localhost /]# h file
bash: h: command not found
命令列表
a) 分号(;)
使用分号实现命令的连接
[root@localhost /]# cd /home/ ; ll
先执行分号之前的部分,再执行分号之后的部分,不管分号前的部分是否成功,后面的都执行
b) &&
也是实现命令的连接
先执行分号之前的部分,再执行分号之后的部分,但是只有前面的成功了,才执行后面的命令
单&符,是命令程序放在后台
# sleep 800 &
c) ||
也是实现命令的连接
先执行分号之前的部分,再执行分号之后的部分,但是只有前面的失败了,才执行后面的命令
举例
# dasfkjsdf || df -h || ls -l
# dasfkjsdf || kdjkf || ls -l
命令替换
a) !
输入history可以显示历史输入记录,使用“!+历史记录编号”可以执行该历史记录,!后面还可以加命令关键词
b) {}
[root@localhost /]# mkdir –p file/book{cc,dd,ee}
其实就是建立一个名为file目录,在file目录下面建立三个目录bookcc,bookdd,bookee
[root@localhost /]# ll file/
总计 24
drwxr-xr-x 2 root root 4096 03-31 10:42 bookcc
drwxr-xr-x 2 root root 4096 03-31 10:42 bookdd
drwxr-xr-x 2 root root 4096 03-31 10:42 bookee
举例
# touch a{1..10}
# rm -f a{1..10}
[root@manage ~]# touch a{b,c,d,e,f}
[root@manage ~]# echo "fkdsajfjksa" > ab
[root@manage ~]# echo "fkdsajfjksa" > ab
[root@manage ~]# echo "fkdsajfjksa" > ac
[root@manage ~]# echo "fkdsajfjksa" > ad
[root@manage ~]# echo "fkdsajfjksa" > ae
[root@manage ~]# echo "fkdsajfjksa" > af
[root@manage ~]# cat a{b,c,d,e,f}
fkdsajfjksa
fkdsajfjksa
fkdsajfjksa
fkdsajfjksa
fkdsajfjksa
I/O标准输入输出重定向
标准输入(STDIN):默认的设备是键盘,文件编号为0,用“<”表示
标准输出(STDOUT):默认的设备是屏幕,文件编号为1,用>或1>与>>表示
标准错误(STDERR):默认的设备是屏幕,文件编号为2,用2>表示
一.> 覆盖重定向:文件有则覆盖,无则创建。
# 命令 > 文件名 // 把正确操作信息重定向到文件。
# 命令 2> 文件名 // 把错误操作信息重定向到文件。
# 命令 &> 文件名 // 把正错两种操作信息同时重定向到文件。
# 命令 > /dev/null 2> 文件名 // 重定向错误信息,彻底删除正确信息。
# 命令 > 文件名 2> /dev/null // 重定向正确信息,彻底删除错误信息。
# 命令 > 文件名A 2> 文件名B // 正确与错误信息分别重定向到不同文件里。
二.>> 追加重定向:文件有则追加到底部,无则创建。
# 命令 >> 文件名 // 把正确操作信息追加到文件。
# 命令 2>> 文件名 // 把错误操作信息追加到文件。
# 命令 &>> 文件名 // 把正错两种操作信息同时追加到文件。
# 命令 >> /dev/null 2>> 文件名 // 追加错误信息,彻底删除正确信息。
# 命令 >> 文件名 2>> /dev/null // 追加正确信息,彻底删除错误信息。
# 命令 > 文件名A 2> 文件名B // 正确与错误信息分别追加到不同文件里
特殊符号
注意shell中几个符号的意义
------------------------------------------------------------
"" 除了空格,其它字符都不改变意义
'' 屏蔽单引号内所有字符的意义
`` 反撇号内可使用执行命令
$() 针对多命令嵌套的变量值,反撇号无用
\ 转意符,让有意义的变为无意义,无意义的变为有意义
$# 位置参数的数量。
$* 或$@ 所有位置参数的内容。
$? 命令执行后返回的状态。
$$ 当前进程的进程号。
$! 后台运行的最后一个进程号。
$0 当前执行的进程名。
$? 用于检查上一个命令执行是否正确。(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错。)
举例:上面所有特殊符号例子
[root@wml ~]# vim s.sh
------------------------------------------------------
echo $0 \$0
echo $1 \$1
echo $2 \$2
echo $3 \$3
echo $# \$\#
echo $? \$\?
echo $$ \$\$
echo $* \$\*
sleep 800 &
echo "$!" \$\!
------------------------------------------------------
[root@wml ~]# ./sss aaaa asfsa fasdfsa
./sss $0
aaaa $1
asfsa $2
fasdfsa $3
3 $#
0 $?
5553 $$
aaaa asfsa fasdfsa $*
5554 $!
举例:"" 除了空格,其它字符都不改变意义
[root@localhost ~]# aa=cc
[root@localhost ~]# echo "$aa" > b.sh
[root@localhost ~]# cat b.sh
cc
举例:'' 屏蔽单引号内所有字符的意义
[root@localhost ~]# echo '$aa' > b.sh
[root@localhost ~]# cat b.sh
$aa
举例:`` 反撇号内可使用执行命令
#/bin/bash
time=`/bin/date +%Y%m%d-%H%M%S`
/bin/tar -zcvpPf /backup/officialSite_${time}.tar.gz /usr/local/tomcat/webapps/officialSite >/dev/null 2>&1
/bin/tar -zcvpPf /backup/mall_${time}.tar.gz /usr/local/tomcat/webapps/mall >/dev/null 2>&1
举例:$() 针对多命令嵌套的变量值,反撇号无用
# a=$(cat /etc/passwd;ls -a;ll)
# echo $a
# ls -a $(ll $(cat /etc/passwd))
举例:\ 转意符,让有意义的变为无意义,无意义的变为有意义
# cat /etc/passwd &\& ls -l
$? 与 exit 0 或1 相同都是上面内容 执行正确 为0,否则为1