一、 管道符和作业控制
1.
| 管道符 把前面一个文件的输出传递给下一个命令
[root@localhost ~]# cat 11.txt |grep root #cat 11.txt的内容,并将结果传递给grep,过滤出带有root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
2.
ctrl z
将进程暂停,放到后台
[root@localhost ~]# vim 11.txt #编辑11.txt的时候按下
ctrl z,那么就会将vim这个命令放到后台
[1]+ 已停止 vim 11.txt
3.
jobs 列出停止的任务
[root@localhost ~]# vim 2.txt #再编辑一个文件2.txt,并放到后台
[2]+ 已停止 vim 2.txt
[root@localhost ~]# jobs #可以使用jobs列出停止的任务,目前有两个
[1]- 已停止 vim 11.txt
[2]+ 已停止 vim 2.txt
4.
fg 将任务回到前台并运行
[root@localhost ~]# fg 2 #使用fg+停止任务的ID就可以回到前台
vim 2.txt
5.
bg 将任务放到后台并运行
[root@localhost ~]# vmstat 1 #运行命令vmstat 1
[1]+ 已停止 vmstat 1 #使用
ctrl z暂停命令
[root@localhost ~]# bg 1 #
使用bg将命令放到后台运行
[1]+ vmstat 1 &
[root@localhost ~]# jobs #使用jobs可以看到命令
vmstat 1在后台运行,带有"&"标志
[1]+ 运行中 vmstat 1 &
6. 在命令后面加上&可以直接将任务放到后台运行
[root@localhost ~]# sleep 100& 在sleep 100后面加上&,命令直接到后台运行
[2] 2057
[root@localhost ~]# jobs
[1]+ 已停止 vmstat 1
[2]- 运行中 sleep 100 &
二、shell变量
1.
env 显示当前用户的环境变量
set 用来显示本地变量
[root@localhost ~]# env
XDG_SESSION_ID=4
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
.......
2. 自定义变量
变量名规则:字母,数字,下划线,首字母不能是数字
变量的值有特殊的符号时需要用单引号括起来,一般不要使用双引号
当变量比较复杂的时候可以用多个双引号引起来
[root@localhost ~]# mm=333 #自定义一个变量mm
[root@localhost ~]# echo $mm
333
[root@localhost ~]# ss='a s d' #变量含有特殊符号,比如空格的时候,最好用单引号
括起来
[root@localhost ~]# echo $ss
a s d
[root@localhost ~]# xx=1 #变量的累加,直接引用即可
[root@localhost ~]# cc=2
[root@localhost ~]# nn=$xx$cc
[root@localhost ~]# echo $nn
12
3. 查看当前再哪个TTY上
[root@localhost ~]# echo $SSH_TTY
/dev/pts/3
4. export 定义全局变量,指向下的shell,不支持向上
[root@localhost ~]# export ss=123 # 定义一个全局变量ss=123
[root@localhost ~]# bash #进入一个子shell
[root@localhost ~]# echo $ss #变量依然生效
123
5. unset 取消变量
[root@localhost ~]# echo $ss
123
[root@localhost ~]# unset ss #取消ss的变量
[root@localhost ~]# echo $ss
[root@localhost ~]#
三、环境变量配置文件
1. 系统层次的环境配置文件: /etc/profile 用户环境变量,交互,登陆才执行
/etc/bashrc 用户不用登陆,执行shell就生效
用户层次的环境配置文件: .bash_logout 用户退出时需要做得操作
.bash_profile
.bashrc
2. 变量 PS1 在/etc/bashrc里面定义
[root@localhost ~]# echo $PS1 #PS1是
用来设置[root@lx01 name1] 显示的,
[\u@\h \W]\$ #
u表示用户,h表示hostname,W表示路径的最后一层
[root@localhost ~]# PS1='<\u@\h \w>\$ ' #更改PS1变量的内容
<root@localhost ~># cd /tmp/qw/333 #可以看到原来使用[],现在为<>,大写的W变为小写的w,路径显示由只显示最后一层变为全部显示
<root@localhost /tmp/qw/333>#
PS1有那些配置,或者说PS1里头都能配置些命令提示符的什么东西:
\d :代表日期,格式为weekday month date,例如:"Mon Aug 1"
\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
\# :下达的第几个命令
\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$
四、Linux 系统添加操作记录审计
有时我们需要对线上用户操作记录进行历史记录待出现问题追究责任人,但Linux系统自带的history命令用户有自行删除权限
可以设置可以让用户的操作记录实时记录,并保证普通用户无权删除呢,可以执行以下操作
<root@localhost /usr/local># mkdir -p /usr/local/records/
<root@localhost /usr/local># chmod 777 /usr/local/records/
<root@localhost /usr/local># chmod +t /usr/local/records/
<root@localhost ~># vim /etc/profile
将以下内容添加到
/etc/profile里面:
if [ ! -d /usr/local/records/${LOGNAME} ] #如果这个目录不存在就创建这个目录
then
mkdir -p /usr/local/records/${LOGNAME}
chmod 300 /usr/local/records/${LOGNAME}
fi
export HISTORY_FILE="/usr/local/records/${LOGNAME}/bash_history" #定义一个命令历史文件
export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'
date "+%Y-%m-%d %T # 年月日时间
(who am i |awk "{print \$1\" \"\$2\" \"\$5}"
#
who am i命令的结果取第一段,第二段、第五段
history 1 | { read x cmd; echo "$cmd";} #显示最后一条命令