变量命名规则
- 用户自定义变量
- 环境变量:主要保存的是和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的。
- 位置参数变量:主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
#命令历史
敲过的命令都是有历史保存的,保存在/root/.bash_history, 可以通过"history"查看之前的命令
有系统内置环境变量控制(有时候数值会大于1000是因为仅暂存于内存当中,还未写入,当退出终端时候才会从内存中转存入文件里去)
如何通过history现实变量是什么时间运行的?可以通过变量重新赋值(暂时保存)---更改命令历史格式
如果需要永久生效, 在/etc/profile 里面更改(更改后重新打开窗口)
如果想历史永久保存,可以运行隐藏权限,chattr+a 只能追加
!!表示最后一条命令
!n 运行第n条命令
!word 在命令历史里倒叙查找以word开头的命令
history -c : 清除当前内存内的全部命令记忆
history -r : 将history文件中的命令记忆读出到当前内存中#一般登录时会自动进行
history -w: 将目前的内存中的命令记忆写入history文件中#一般登出时会自动进行
source 命令source 环境变量配置文件名 或者 . 环境变量配置文件名# 修改配置文件后,必须注销重新登录才能生效,使用source 命令可以不用重新登录
#命令补全及别名
alias(unalias取消自定义的别名)
#通配符
ls *.txt通配,*可放前可放后(代表0到无穷多个任意字符)
ls ?.txt 类似于* 但是?仅指一个字符(下图bb.txt就不会显示)
cat 1.txt >2.txt 就是把1.txt删除重定向 重写
cat 1.txt >> 2.txt 会保留1.txt追加到2中去,追加重定向
lsaaa 2> a.txt (2>就是把错误文件定向到a.txt里去)
总结,>重定向 >>追加重定向 2>错误重定向 2>>错误追加重定向 >+2> = &>
*也可以使用以下命令把正确的和错误的命令区分开(写shell脚本的时候用的比较多)
#特殊符号
符号 | 内容 |
# | 批注号,解释说明, 之后的命令不会生效 |
\ | 转义符号,将特殊字符或通配符还原成一般字符 |
| | 管道符 |
; | 命令衔接符,连续执行两条命令 |
~ | 当前用户家目录 |
$ | 取用变量符号 |
& | 工作控制,将指令变成后台工作 |
! | 逻辑非 |
>、>> | 数据流重定向,output |
<、<< | 数据流重定向,input |
' ' | 单引号,无法引用变量 |
" " | 双引号,可以引用变量 |
` ` | 指令引用,功能同 $(command) |
|| | 表示或者的意思,执行其中一个命令 |
&& | 当一个命令成功后才执行后面一个命令 |
实例:
#管道符和作业控制
管道的作用:把前面的命令输出的结果交给后面的命令
cut 的用法: 通过命令将输出截成几段
sort的用法:按字母进行排序、
实例,sort和uniq一起用,先排序再去重,然后统计
tee和>的区别在于,tee会写入的同时显示出来而">" 仅仅写入而不会显示(也就是tee命令等同于> + cat命令)如下例
tr用法
作业控制
Ctrl z 暂停某任务,之后可以用命令"fg" reverse back to previous command/---bg
可以用jobs列出后台任务,然后用fg/bg命令进行前后台切换
放入后台的工作是无法用 Ctrl + c 来终止的
后台的工作有两种状态: 暂停(stop) 和 运行中( running)
jobs 的选项:
-l:同时列出任务的 PID
-r: 仅列出后台中处于 "running" 的任务
-s: 仅列出后台中处于 "stop" 的任务
Kill 命令: 用来衣橱后台的任务
pkill +pname(针对需要关闭的名字)
kill +pid(针对于需要关闭的id)
kill -9(强制关闭后跟pid)
kill -1 (reload重新读区参数配置文件)
kill -15正常方式结束一个任务
垃圾桶 /dev/null
Linux 下有一个特殊的设备 /dev/null ,所有被写入该设备的东西都会消失,所以如果有部分信息不想输出至文件,也不想输出至屏幕,那就输出至 /dev/null 吧
#Shell变量
通过env命令来获取系统的变量,系统的变量通常是大写字母
也可以通过set来查看变量,同时也可以查看自定义的变量
当命令中有特殊符号是,要改为单引号,如下
同时,两个变量也可以同时显示
如何查询当前窗口在哪个tty下?(echo $SSH_TTY)
全局变量仅适用于子bash,上层的不生效
#环境变量配置文件
.
"." = "source" 意为加载, eg source .bash_profile
~/.bash_logout, 退出时执行的命令,你可以把你需要执行的命令放入此里面
***Linux系统添加操作记录审计
有时候我们需要对线上用户操作记录进行历史记录待出现问题追究责任人,,但Linux系统自带的history命令用户有自行删除权限,那怎么设置可以让用户的操作记录实时记录,并保证普通用户无权删除呢?本文教你一招
1.mkdir -p /usr/local/domob/records/
chmod 777 /usr/local/domob/records/
chmod +t /usr/local/domob/records/
2.vi /etc/profile 在最后添加下面的代码
if [ ! -d /usr/local/domob/records/${LOGNAME} ]
then
mkdir -p /usr/local/domob/records/${LOGNAME}
chmod 300 /usr/local/domob/records/${LOGNAME}
fi
export HISTORY_FILE="/usr/local/domob/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'