linux shell命令
别名:
alias ll="ls -l"
命令的查找步骤:
- 如果是使用相对命令(如./command直接执行当前目录下的command文件),那么直接在当前目录下找到这个文件并执行。
- 绝对命令(如/usr/mysql/command)的方式,那么直接执行这个文件。
- 如果没有使用绝对路径,也没有./,那么先查看有没有设置的alias,否则就去PATH环境变量配置的路径下寻找,然后执行第一个寻找到的文件。
所以,如果不是在PATH中配置的目录中的文件,不能直接使用名字执行,要在相应目录下使用./执行。
关于login shell和non-login shell
- login shell是登录的时候获取的shell环境。
login shell只会触发/etc/profile和~/bash_profile。
其中~/bash_profile会调用~/.bashrc。
- non-login shell会在不需登录而获取的shell。如直接执行bash命令。
non-login shel只会调用~/.bashrc
通配符和特殊符号
#通配符
通配符和正则不一样,正则只能用在grep中,而且更加复杂一些。通配符可以用在普通命令的参数(如文件名参数)中。
符号==> ? , * , [] , [-] , [^]
各符号说明;
- ? ==> 匹配任何一个单独的未知字符.
- * ==> 匹配任何数目的未知字符.
- [] ==> 匹配[]内所指的任何一个单独的字符.
- [-] ==> 匹配[-]所指的范围内任何一个单独的字符.(字符一般位数字,如[1-9])
- [^] ==> 匹配非[^]的所指的任何一个单独字符.
范例:
删除当前目录下的所有文件
[laopi@Think ~]$ rm ./*
删除当前目录下文件名刚好五个字母的文件
[laopi@Think ~]$ rm ./?????
删除当前目录下文件名含有数字的的文件
[laopi@Think ~]$ rm ./*[0-9]* <==注意中括号两边均有*
删除当前目录下文件名不含abc中任意字母的文件
[laopi@Think ~]$ rm ./*[^abc]* <==注意中括号两边均有*
删除当前目录下文件名非小写字母开头的文件
[laopi@Think ~]$ rm ./[^a-b]* <==注意中括号右边均有*
#特殊符号
符号与说明;
# <==批注符号,这个最常使用在脚本当中,视为说明后面的数据均不执行.
\ <==转义符号,将特殊符号或通配符还原成一般字符.
| <==管道,分隔两个管道命令的界定.
; <==连续命令的分隔符.
$ <==使用变量前导符.
! <==逻辑运算意义上的"非"
/ <==目录符号.
> 和>> <==数据流定向,输出向导,分别为替换和累加.
< 和<< <==数据流定向,输入向导.
'' <==单引号,不具有变量置换功能.
"" <==双引号,据有变量功能.
`` <==两个`中间为可以先执行的命令,也可以用$()替换
- <==后面接命令参数
输出流重定向
[root@localhost ~]# ll -a > lla.txt [root@localhost ~]# cat lla.txt 总用量 2288 dr-xr-x---. 14 root root 4096 8月 16 00:55 . drwxr-xr-x. 20 root root 4096 8月 15 22:01 .. -rw-------. 1 root root 1047 5月 26 06:21 anaconda-ks.cfg -rw-------. 1 root root 7670 8月 15 23:41 .bash_history -rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout -rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile |
还有输入流重定向,就不在研究了。
一条语句执行多个命令
不考虑成功失败:command1; command2
第一个成功就执行下一个: command1&& command2
第一个失败就执行下一个: command1|| command2
管道命令
使用|将一个命令的结果作为参数传给下一个命令。
特殊场景,管道中-的用途:
某些命令需要用到文件名 (例如 tar) 来进行处理时,该 stdin 与 stdout 可以利用减号 "-" 来替代, 举例来说:
[root@www ~]# tar -cvf - /home | tar -xvf -
上面这个例子是说:『我将 /home 里面的文件给他打包,但打包的数据不是纪录到文件,而是传送到 stdout; 经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf - 』。后面的这个 - 则是取用前一个命令的 stdout, 因此,我们就不需要使用 file 了!
xargs
xargs将管道的结果按照空格符或者换行符分割后,逐个传递给下一个命令。
在第一个命令的结果,对于第二个命令来说,是多个参数,要调用第二个命令多次的时候,xargs就派上用场了。