linux 学习笔记-024-管道符和作业控制,shell 变量,环境变量配置文件

发布于 2018-01-30  352 次阅读


管道符和作业控制

把一个文件的是输出的结果传递给后面的命令

[root@aming-01 ~]# find ./ | wc -l
58

ctrl+z:临时暂停一个任务

[root@aming-01 ~]# vim a.txt
[1]+ 已停止 vim a.txt

fg id:把临时暂停的任务调到前台来继续运行

jobs:把临时暂停的任务列出来

[root@aming-01 ~]# jobs
[1]- 已停止 vim a.txt
[2]+ 已停止 vim 1.txt
[root@aming-01 ~]# fg 1
vim a.txt

bg id:把任务调到后台并运行,运行一些不断运行的命令的时候可以看出效果

[root@aming-01 ~]# sleep 1000
^Z
[1]+ 已停止 sleep 1000
[root@aming-01 ~]# jobs
[1]+ 已停止 sleep 1000
[root@aming-01 ~]# bg
[1]+ sleep 1000 &
[root@aming-01 ~]# jobs
[1]+ 运行中 sleep 1000 &

命令后面加&直接把命令丢到后台去运行

[root@aming-01 ~]# sleep 1000 &
[1] 3387
[root@aming-01 ~]# jobs
[1]+ 运行中 sleep 1000 &

shell 变量

env:查看系统的环境变量信息

[root@aming-01 ~]# env
XDG_SESSION_ID=1
HOSTNAME=aming-01
SELINUX_ROLE_REQUESTED=
………………省略部分输出信息………………
LOGNAME=root
SSH_CONNECTION=172.17.1.1 6549 172.17.1.240 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env

set:也会查看系统的环境变量信息,除了系统的变量信息,用户自定义的也会显示

[root@aming-01 ~]# set
………………省略部分输出信息………………
{
local quoted;
_quote_readline_by_ref "$1" ret;
printf %s "$ret"
}
[root@aming-01 ~]# a=111111
[root@aming-01 ~]# echo $a
111111
[root@aming-01 ~]# set | grep 111111
_=111111
a=111111

变量的命名规则:字母,下划线,首位不能为数字,有特殊符号要用单引号括起来

[root@aming-01 ~]# a1=2
[root@aming-01 ~]# echo $a1
2
[root@aming-01 ~]# a_1=2
[root@aming-01 ~]# echo $a1
2
[root@aming-01 ~]# _a1=2
[root@aming-01 ~]# echo $a1
2
[root@aming-01 ~]# 1aa=2
-bash: 1aa=2: 未找到命令
[root@aming-01 ~]# a=a b c
-bash: b: 未找到命令
[root@aming-01 ~]# a='a b c'
[root@aming-01 ~]# echo $a
a b c

变量的累加:当累加的时候有变量,可以用双引号把变量单独引起来

[root@aming-01 ~]# a=1
[root@aming-01 ~]# b=2
[root@aming-01 ~]# echo $a$b
12
[root@aming-01 ~]# c=a"$b"c
[root@aming-01 ~]# echo $c
a2c

全局环境变量:只在当前的 shell 和子 shell 下会生效

没 pstree,可以使用 yum provides /*/pstree 查询这个命令所在的包,然后用 yum 安装这个包

[root@aming-01 ~]# bash
[root@aming-01 ~]# pstree
systemd─┬─NetworkManager───3*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─irqbalance
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───4*[{tuned}]
[root@aming-01 ~]# export a=1
[root@aming-01 ~]# echo $a
1
[root@aming-01 ~]# bash
[root@aming-01 ~]# pstree
systemd─┬─NetworkManager───3*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─irqbalance
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───bash───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───4*[{tuned}]
[root@aming-01 ~]# echo $a
1
[root@aming-01 ~]# exit
exit
[root@aming-01 ~]# exit
exit
[root@aming-01 ~]# echo $a

[root@aming-01 ~]#

unset:取消变量

[root@aming-01 ~]# a=1
[root@aming-01 ~]# echo $a
1
[root@aming-01 ~]# unset a
[root@aming-01 ~]# echo $a

[root@aming-01 ~]#

环境变量配置文件

系统的变量配置文件:

/etc/profile:用户环境变量,交互和登录才会执行,如果有所有用户都要生效的变量,可以放到这个目录下,但一般不建议做修改

[root@aming-01 ~]# ls /etc/profile
/etc/profile

/etc/bashrc:用户不用登录,执行 shell 脚本就会生效,不建议做修改

[root@aming-01 ~]# ls /etc/bashrc
/etc/bashrc

~/.bash_profile:当前用户的变量配置文件,如果有需要当前用户生效的变量,修改这个即可

[root@aming-01 ~]# ls ~/.bash_profile
/root/.bash_profile

. ~/.bash_profile 和 source ~/.bash_profile 作用一样

[root@aming-01 ~]# . ~/.bash_profile
[root@aming-01 ~]# source ~/.bash_profile

~/.bash_profile 会自动调用~/.bashrc,~/.bashrc 会自动调用/etc/bashrc

[root@aming-01 ~]# vim ~/.bash_profile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
[root@aming-01 ~]# vim ~/.bashrc
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

~/.bash_logout:定义用户退出时要做的操作,如用户每次退出时删除命令历史,就可以在这个配置文件下写入删除命令历史的那句命令

[root@aming-01 ~]#

解析:第一位为当前登录的用户,第二位为@hostname,第三位为当前所在的目录

PS1:这个变量可以定义[root@aming-01 ~]# 的格式,颜色等

[root@aming-01 ~]# echo $PS1
[\u@\h \W]\$
[root@aming-01 ~]# PS1="[\u@\h \w]\$"
[root@aming-01 ~]$echo $PS1
[\u@\h \w]$
[root@aming-01 ~]$cd /tmp/
[root@aming-01 /tmp]$cd aminglinux/
[root@aming-01 /tmp/aminglinux]$

测试:

PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '

PS2:
root@aming-01:~# PS2='#'
root@aming-01:~# echo $PS2
#
root@aming-01:~# for i in 'seq 1 10'
#do
#e

扩展

bashrc 和 bash_profile 的区别:

http://ask.apelearn.com/question/7719