linux shell命令

别名:

alias ll="ls -l"

命令的查找步骤:

  1. 如果是使用相对命令(如./command直接执行当前目录下的command文件),那么直接在当前目录下找到这个文件并执行。
  2. 绝对命令(如/usr/mysql/command)的方式,那么直接执行这个文件。
  3. 如果没有使用绝对路径,也没有./,那么先查看有没有设置的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就派上用场了。

 

 

posted on 2017-08-16 00:15  张小贱1987  阅读(154)  评论(0编辑  收藏  举报

导航