一、管道符
前面已经提过过管道符 “|”, 就是把前面的命令运行的结果丢给后面的命令。
# cat 1.txt | wc -l //显示1.txt文件行数
二、作业控制
当运行进程时,你可以使它暂停(按Ctrl+Z组合键),然后使用fg(foreground的简写)命令恢复它,或是利用bg(background的简写)命令使它到后台运行。此外,你也可以使它终止(按Ctrl+C组合键) 实例: 1、编辑1.txt文件,随意输入一些内容,然后Esc退出编辑模式,按Ctrl+z暂停任务: 可以看到提示 “1.txt” 已经停止了,然后使用fg命令恢复它,此时又进入刚才的 “vi” 窗口了。 2、如果想把暂停的任务丢在后台跑起来(vmstat 1是用来观察系统状态的一个命令,会不停的变化),就使用bg命令。 bg命令,是暂停的任务在后台跑: jobs命令,可以看到被暂停或者在后台运行的任务。 丢到后台的任务如何关掉呢?如果你没有退出刚才的shell, 那么先使用 fg 编号 把任务调到前台,然后使用 “Ctrl + c” 结束任务: 如果运行一个指令直接就在后台跑,在命令后面加&就可以,并且会显示pid信息: 有一种情况则是,关闭到当前的shell, 再次打开另一个shell时,使用jobs命令并不会显示在后台运行或者被暂停的任务,要想停掉它的话,则需要先知道其pid, 然后使用kill命令杀死那个进程。
# ps aux | grep vmstat //显示vmstat进程
# kill 2744
kill命令语法很简单,直接在后面加pid即可,如果遇到杀不死的进程时,可以在kill 后面加一个选项:kill -9 [pid]
三、变量
之前的笔记中写到过环境变量PATH,这个环境变量就是shell预设的一个变量,通常shell预设的变量都是大写的。变量,说简单点就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据。就拿PATH来讲,这个PATH就代替了所有常用命令的绝对路径的设定。因为有了PATH这个变量,所以我们运行某个命令时不再去输入全局路径,直接敲命令名即可。你可以使用echo命令显示变量的值。 如果需要查看系统预设的全部环境变量,使用命令:
# env
不过,登录的用户不一样这些环境变量的值也不一样,当前显示的就是root这个账户的环境变量了。下面是一些常见的环境变量:
HOSTNAME表示主机的名称 SHELL 表示当前用户的shell类型 HISTSIZE 表示历史记录数 MAIL 表示当前用户的邮件存放目录 PATH 该变量决定了shell将到哪些目录中寻找命令或程序 PWD 表示当前目录 LANG 这是与语言相关的环境变量,多语言环境可以修改它 HOME 表示当前用户的家目录 LOGNAME 表示当前用户的登录名
env命令显示的变量只是环境变量,系统预设的变量其实还有很多,你可以使用set命令把系统预设的全部变量都显示出来。
# set
set命令不仅可以显示系统预设的变量,也可以显示用户自定义的变量。
比如自定义个变量zzz:
虽然你可以自定义变量,但是该变量只能在当前shell中生效。
使用bash
命令即可再打开一个shell,此时先前设置的 “zzz” 变量已经不存在了,退出当前shell回到原来的shell, “zzz” 变量还在。如果需要让变量一直在,那么有两种情况:
1)、允许系统内所有用户登录后都能使用该变量。操作方法:在/etc/profile文件的最后一行加入export zzz=test,然后运行source /etc/profile 就能生效。
2)、仅允许当前用户使用该变量。操作方法:在用户主目录下的.bashrc 文件的最后一行加入expor zzz=test,然后运行source .bashrc 就能生效。
source命令的作用是,将目前设定的配置刷新,即不用注销再登录也能生效。
在说下Linux下自定义变量的规则:
1、设定变量的格式为 “a=b”, 其中a为变量名,b为变量的内容,等号两边不能有空格; 2、变量名只能由英、数字以及下划线组成,而且不能以数字开头; 3、当变量内容带有特殊字符(如空格)时,需要加上单引号; 也有特殊情况: -变量内容中本身带有单引号,这就需要用到双引号了 -如果变量内容中需要用到其他命令运行结果则可以使用反引号 -变量内容可以累加其他变量的内容,需要加双引号
通过上面几个例子能看得出,单引号和双引号的区别,用双引号时不会取消掉里面出现的特殊字符的本身作用(这里的$),而使用单引号则里面的特殊字符全部失去它本身的作用。
在前面的例子中多次使用了bash
命令,如果在当前shell中运行bash命令,则会进入一个新的shell,这个shell就是原来shell的子shell。可以用pstree命令查看。(安装pstree命令:yum install -y psmisc)pstree命令会把linux系统中的所有进程以树形结构显示出来。
在父shell中设定一个变量后,进入子shell后该变量是不会生效的.如果想让这个变量在子shell中生效则要用到export指令。
如果想让这个变量在子shell中生效则要用到export指令。
export xxx=hahaha
在子shell中设定变量后即便用export声明了变量,也不能在父shell中生效,往下层不往上层。
export声明变量后,切换到其他终端就失效了,如果需要时刻生效,则需要把变量加入到/etc/profile中,参考上文。
当打开多个终端时,可使用echo $SSH_TTY
可以查看自己所在的终端:
能自定义变量,那么必然可以取消自定义变量:
# unset 变量名
四、变量配置文件
环境变量配置文件分为:系统环境变量配置文件和用户环境变量配置文件。 系统级别的配置文件:
**/etc/profile :**这个文件预设了几个重要的变量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umask等等。 **/etc/bashrc :**这个文件主要预设umask以及PS1。这个PS1就是我们在敲命令时,前面那串字符了,例如我的linux系统PS1就是 [root@localhost ~]#, 我们不妨看一下PS1的值: \u 就是用户, \h 主机名, \W 则是当前目录,$ 就是那个 ‘#’ 了,如果是普通用户则显示为 ‘$’。
用户环境变量配置文件(在用户家目录下):
.bash_profile :定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。 **.bashrc **:该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。例如你可以将用户自定义的alias或者自定义变量写到这个文件中。 **.bash_history **:记录命令历史用的。 .bash_logout :当退出shell时,会执行该文件。可以把一些清理的工作放到这个文件中。