8.6 管道符 |

  • 管道符的作用是将前面一个命令的输出作为后面一个命令的输入
[root@linux-151 ~]# cat /etc/passwd |wc -l
27
[root@linux-151 ~]# cat /etc/passwd |grep "root"
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin



作业控制

当一个进程运行时,ctrl+z 可以暂停这个任务

[root@linux-151 ~]# sleep 100
^Z
[1]+ 已停止 sleep 100

当暂停后,可以输入fg(foreground简写)命令来恢复这个进程,让它在前端继续运行。

[root@linux-151 ~]# fg
sleep 100

我们也可以使用命令bg(background简写)将暂停的进程直接丢到后台运行。

[root@linux-151 ~]# bg
[1]+ sleep 100 &

我们可以使用命令jobs来查看有那些进程是被暂停了。

[root@linux-151 ~]# jobs
[1]- 已停止 sleep 100
[2]+ 已停止 sleep 200

我们可以直接将一条命令丢在后台运行。

[root@linux-151 ~]# sleep 300 &
[3] 2180
[root@linux-151 ~]# jobs
[1]- 已停止 sleep 100
[2]+ 已停止 sleep 200
[3] 运行中 sleep 300 &



8.7/8.8 shell变量

  • 变量就是使用一个比较简单的字符串来代替某些具有特殊意义的设定以及数据。
  • 环境变量PATH,它是shell预设的一个变量,通常shell预设的变量都是大写的。
[root@linux-151 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@linux-151 ~]# echo $HOME
/root
[root@linux-151 ~]# echo $HISTSIZE
5000



命令env

  • 使用env命令可以列出系统预设的全部系统变量
[root@linux-151 ~]# env
XDG_SESSION_ID=1
HOSTNAME=linux-151
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.0.103 53060 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.0.103 53060 192.168.0.151 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
  • HOSTNAME:表示主机的名称;
  • SHELL:表示当前用户的shell类型;
  • HISTSIZE:表示历史记录数;
  • MAIL:表示当前用户的邮件存放目录;
  • PATH:改变量决定了shell将到那些目录中寻找命令或者程序;
  • PWD:表示当前目录;
  • LANG:这是与语言相关的环境变量,多语言环境可以修改此环境变量;
  • HOME:表示当前用户的家目录;
  • LOGNAME:表示当前用户的登录名;


命令set

  • 命令set不仅可以显示系统预设的环境变量,还可以显示用户自定义的变量。

自定义变量规则:

  • 设定变量的格式为a=b,其中a为变量名,b为变量的内容,等号两边不能有空格;
  • 变量名只能由字母,数字以及下划线组成,而且不能以数字开头。
  • 当变量值带有特殊字符(如空格)时,需要加上单引号。
[root@linux-151 ~]# name=l em
-bash: em: 未找到命令

[root@linux-151 ~]# name='l em'
[root@linux-151 ~]# echo $name
l em

变量内容本身就带有单引号,这个时候需要加上双引号

[root@linux-151 ~]# name="l'em"
[root@linux-151 ~]# echo $name
l'em

如果变量内容中需要用到其他命令,运行结果则可以使用反引号;

[root@linux-151 ~]# name=`pwd`
[root@linux-151 ~]# echo $name
/root

变量内容可以累加其他变量的内容,但需要加上双引号

[root@linux-151 ~]# a=1
[root@linux-151 ~]# b=2
[root@linux-151 ~]# c=3
[root@linux-151 ~]# d="$a$b$c"
[root@linux-151 ~]# echo $d
123

查看当前在哪个终端下:

[root@linux-151 ~]# echo $SSH_TTY
/dev/pts/0

如果再当前shell中运行bash命令,则会进入一个新的shell中,这个shell是原来shell的子shell,我们可以用pstree来查看: 需要先安装一个包:

[root@linux-151 ~]# yum install -y psmisc

systemd─┬─NetworkManager───2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon
├─firewalld───{firewalld}
├─irqbalance
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash─┬─bash───pstree
│ └─2*[sleep]
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}

设置全局变量

export a=11
  • 注意:export声明变量a后,只会让该shell的子shell或者孙shell生效,但是不会让它的父shell和其他终端的shell生效。

撤销变量

unset 变量名



8.9 系统环境变量和个人环境变量

  • /etc/profile 用户环境变量,交互,登录才执行
  • /etc/bashrc 用户不用登录,执行shell就生效
  • ~/.bashrc
  • ~/.bash_profile
  • ~/.bash_history
  • ~/.bash_logout
  • PS1='[\033[01;32m]\u@\h[\033[00m]:[\033[01;36m]\w[\033[00m]$ '

环境变量分为系统层次变和用户层次

  • /etc/profile 设置系统环境变量,不管针对哪个用户这些环境变量都会生效,但是设置这个配置文件不太好,编辑的时候会有一段提示: 这不是一个好主意来改变这个文件,除非你知道你 正在做的事情。如果你想更改某些环境变量,最好在/etc/profile.d /下去自定义,创建格式为XXX.sh, 在未来的更新将防止合并的必要性。
[root@lem ~]# ls /etc/profile.d
colorls.csh glib2.csh lang.csh less.csh path.sh vim.sh
colorls.sh glib2.sh lang.sh less.sh vim.csh which2.sh

[root@lem ~]# vim /etc/profile.d/path.sh
#!/bin/path
export PATH=$PATH:/tmp/:/data/bin/
  • 编辑完后要source /etc/profile,加载的时候会调用profile.d下面的所有文件。
  • /etc/bashrc 设置PS1和umask; 它和/etc/profile一样,在/etc/bashrc设置不好,要在/etc/profile.d下去定义,创建格式为.sh的文件
  • 进去编辑配置,完成后source /etc/profile 加载一下。
[root@lem ~]# vim /etc/profile.d/umask.sh
#bsah/bin
PS1="[\u@\h-\t \W]\$ "
[root@lem ~]# source /etc/profile
[root@lem-23:35:13 ~]$ ls
  • \u 用户名 \h主机名 \t 时间 \W 当前目录 \w 目录的完整路径 $ 就是#,如果普通用户就是$
  • .bash_profile 定义用户自己的环境变量,每个用户都可以使用该文件输入专用于自己使用的shell信息,当用户登陆时,该文件仅仅执行一次
  • .bashrc :文件包含专属用户自己的shell的bash信息,登陆时以及每次打开新的shell时,该文件都被读取。可以将用户之定义的alias或者自定义变量写到这个文件中
  • .bash_history 记录命令历史用的
  • .bash_logout 退出shell时,会执行该文件,可以把一些清理的工作放到这个文件中。