- shell简介
- Shell是一个命令解释器,提供用户和机器之间的交互。
- 支持特定语法,比如逻辑判断、循环。
- 每个用户都可以有自己特定的shell。
- CentOS7默认shell为bash(Bourne Agin Shell)还有zsh、ksh等。
- 可以通过命令yum list |grep zsh(ksh)查看系统是否已安装zsh、ksh。
- Shell的命令历史
- (之前使用过的命令在/root/.bash_history下保存,可以使用命令cat !$查看)(当没有正常通过命令退出时,会导致命令历史未记载或丢失)
- history命令可以查看之前使用过的命令,最大可以存1000条(history -c命令可以情况内存里的命令历史)(命令使用过之后只有在退出终端之后才会保存)。
- .bash_history(命令历史保存文件)。
- 变量HISTSIZE。
- /etc/profile中可以修改最大保存数量(需要重新登陆终端或使用source /etc/profile命令)
- 修改之后可以通过命令echo $HISTSIZE查看是否修改成功。
- 当时有命令history时只显示使用过的命令,那么我们想让命令历史显示的更加详实有具体时间。
- 使用命令HISTTIMEFORMAT=”%Y/%m/%d%H:%M:%S”(指定变量模式)。
- 修改之后可以通过命令echo $HISTTIMEFORMAT查看。
- (想让该命令在之后运行中持续生效需要编辑vim /etc/profile ,将HISTTIMEFORMAT=”%Y(年)/%m(月)/%d(日)%H(时):%M(分):%S(秒)”添加在HISTSIZE=1000命令下即可,需要从新登入才能生效)。
- 永久保存chattr +a ~/.bash_history(更改权限为只能追加不能删除)。
- !!(当使用! xx(命令)时会重复命令历史中最近的xx命令并执行)。
- 命令补全和别名
- “tab”键,敲一下为补全命令,当敲一下没补全时则表示有多条以输入命令为开头的命令。敲两下则可以显示所有以输入命令开头的所有文件和目录。
- 参数补全(CenTOS7中默认为不自动补全参数),安装bash-completion后重启即可。
- alias别名给命令重新起个名字(在命令较长是可以通过alias xx(你所起的别名)=xxxxxxxxxxx(你需要输入的长命令)给该长命令命名,之后重启网络服务就可以只输入xx即可起到该长命令的作用)(使用unalias xx即可取消之前的别名)。
- 直接使用alias可以将所有起了别名的命令都列出。
- 各用户都有自己配置别名的文件~/.bashrc
- ls /etc/profile.d/
- 自定义的alias放到~/.bashrc
- 通配符、输入输出重定向
- (*、?、[ ]、{}、>、>>、<均为通配符)
- ls *(一个任意字符).txt可以将所有当前目录下txt文件列出(*可以使用在你所想要看到的字符或命令的前或后)
- ls ?.txt(?一个任意的字符)
- ls [0-9].txt([ ]为一个范围)
- ls {1,2}.txt({}为一个范围)
- cat 1.txt >2.txt(>将左边的输出重定向到右边)
- cat 1.txt >>2.txt(>>将左边的追加到右边)
- ls aaa.txt 2>err(错误重定向)
- ls aaa.txt 2>>err(错误追加重定向)
- (可以使用&>将错误和正确的都输出到一个文件如command >1.txt 2>&1,也可>>追加
- )
- wc -l (命令为查看一个文本文档行数)< 1.txt(输入重定向,将右边的输入到左边)
- 管道符、作业控制
- cat 1.txt |(|为管道符,即将前面命令的结果交由后面命令处理)wc -l
- cat 1.txt |grep
aaa
- “Ctrl z”暂停一个任务
- jobs查看后台的任务
- fg[id](id为最左侧显示数字)把任务调到前台
- bg[id]把任务调到后台
- 命令后面加&直接丢到后台
- Shell变量
- PATH(系统内置变量),HOME,PWD(当前目录),LOGNAME
- env命令(查看系统常用变量,名字一般为大写英文字母)
- set命令(查看变量)较于env命令多了很多变量,并且包括用户自定义的变量。
- 用户可以自定义变量a=1
- 变量名规则:字母、数字下划线,首位不能为数字。
- 变量值有特殊符号是需要用单引号括起来。
- 变量的累加,在使用echo命令查看时两个变量用$分开即可使两个变量内容一起显示。
- 当有多个远程端登陆服务器使用echo $SSH_TTY可以查看你所属的主机。
- 全局环境变量export b=2
- unset变量(取消变量)
- 环境变量配置文件
- /etc/profile 用户环境变量,交互,登录才执行(用户登陆时加载)
- /etc/bashrc 用户不用登陆,执行shell就生效(用户或系统执行一些脚本时使用)
- ~/.bashrc(~为用户家目录)
- ~/.bash_profile(用户登陆时所要做的操作)
- ~/.bash_history
- ~/.bash_logout(用户退出时所要做的操作)
- Ps1=
\[\033[01;32m\]\u(用户)@\h(hostname)\[\033[00m\]:\[\033[01;36m\]\w(用户目录最后一层)\[\033[00m\]\$
([ ]为用户名两边的符号,$为普通用户输入符号。以上所有符号都是为了区分和辨识不同用户更加的方便)
-
bashrc和bash_profile
-
http://ask.apeleam.com/question/7719
-
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
-
PROMPT_COMMAND=
echo -ne ”\033[31mAming\033[0m\033[33m teach\033[0m\033[31m Linux\033[0m”
-
关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command-environment-variables.html
-
echo颜色 http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html
-
Source exec 区别 http://alsww.blog.51cto.com/2001924/1113112
-
Sort并未按SCII排列 http://blog.csdn.net/zenghui08/article/details/7938975
- cat 2.sh (2.sh脚本)
- #!/bin/bash
- echo "children script PID is $$"
- echo "now to children script."
- export a=2
- echo "in children, a=$a"
- cat source.sh (source.sh脚本)
- #!/bin/bash
- echo "fater script PID is $$"
- echo "fater script, set a is 1"
- export a=1
- echo "it will source ./2.sh"
- source ./2.sh
- echo "now to father script."
- echo "fater script, a is $a"
- cat exec.sh (exec.sh脚本)
- #!/bin/bash
- echo "fater script PID is $$"
- echo "fater script, set a is 1"
- export a=1
- echo "it will exec ./2.sh"
- exec ./2.sh
- echo "fater script, a is $a"