系统的合法shell
[leo@localhost ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
- /bin/sh (已经被 /bin/bash 所取代)
- /bin/bash (就是 Linux 预设的 shell)
- /bin/tcsh (整合 C Shell ,提供更多的功能)
- /bin/csh (已经被 /bin/tcsh 所取代)
Bash shell
历史命令
~/.bash_history 记录的是前一次登入以前所执行过的指令, 而至于这一次登入所执行的指令都被暂
存在内存中
#呼出命令
[leo@localhost ~]$ history
命令别名设定:(alias)
例:
alias lm=’ls -al’
命令补全
[Tab] 接在一串指令的第一个字的后面,则为命令补全; [Tab] 接在一串指令的第二个字以后时,则为『文件补齐』! 若安装 bash-completion 软件,则在某些指令后面使用 [tab] 按键时,可以进行『选项/参数的补齐』功能!
查询指令是否为 Bash shell 的内建命令: type
type [-tpa] name
[dmtsai@study ~]$ type [-tpa] name
选项与参数:
:不加任何选项与参数时, type 会显示出 name 是外部指令还是 bash 内建指令
-t : 当加入 -t 参数时, type 会将 name 以底下这些字眼显示出他的意义:
file :表示为外部指令;
alias :表示该指令为命令别名所设定的名称;
builtin :表示该指令为 bash 内建的指令功能;
-p :如果后面接的 name 为外部指令时,才会显示完整文件名;
-a : 会由 PATH 变量定义的路径中, 将所有含 name 的指令都列出来,包含 alias
指令换行
快速删除错误指令
其他
程序化脚本(shell scripts)
通配符
Shell变量
变量取用
[ou@leo ~]$ echo $HOME
/home/ou
[ou@leo ~]$ echo $SHELL
/bin/bash
[ou@leo ~]$ echo $HOME
/home/ou
[ou@leo ~]$ echo $SHELL
/bin/bash
[ou@leo ~]$ echo $MAIL
/var/spool/mail/ou
[ou@leo ~]$ myname=leo
[ou@leo ~]$ echo $myname
leo
变量设定
1. 变量与变量内容以一个等号『=』来连结,如下所示:
『myname=VBird』
2. 等号两边不能直接接空格符,如下所示为错误:
『myname = VBird』或『myname=VBird Tsai』
3. 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:
『2myname=VBird』
4. 变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但
o 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
『var="lang is $LANG"』则『echo $var』可得『lang is zh_TW.UTF-8』
o 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』
5. 可用跳脱字符『\ 』 将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符,如:
『myname=VBird\ Tsai』
6. 在一串指令的执行中,还需要藉由其他额外的指令所提供的信息时,可以使用反单引号『`指令`』或 『$(指
令)』。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本
的设定:
『version=$(uname -r)』再『echo $version』可得『3.10.0-229.el7.x86_64』
7. 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:
『PATH="$PATH":/home/bin』或『PATH=${PATH}:/home/bin』
8. 若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:
『export PATH』
9. 通常大写字符为系统默认变量,自行设定变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;
10. 取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的设定:
『unset myname』
在变量的设定当中,单引号与双引号的用途有何不同?答:单引号与双引号的最大不同在于双引号仍然可以保有变量的内容,但单引号内仅能是一般字符 ,而不会有特殊符号。
**
引用额外命令输出的内容,可以使用反单引号『指令
』或 『$(指令)』
取消变量:unset 变量名
环境变量
env 观察环境变量
范例一:列出目前的 shell 环境下的所有环境变量与其内容。
[dmtsai@study ~]$ env
HOSTNAME=study.centos.vbird <== 这部主机的主机名
TERM=xterm <== 这个终端机使用的环境是什么类型
SHELL=/bin/bash <== 目前这个环境下,使用的 Shell 是哪一个程序?
HISTSIZE=1000 <== 『记录指令的笔数』在 CentOS 默认可记录 1000 笔
OLDPWD=/home/dmtsai <== 上一个工作目录的所在
LC_ALL=en_US.utf8 <== 由于语系的关系, 鸟哥偷偷丢上来的一个设定
USER=dmtsai <== 使用者的名称啊!
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:
or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:
*.tar=01... <== 一些颜色显示
MAIL=/var/spool/mail/dmtsai <== 这个用户所取用的 mailbox 位置
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
PWD=/home/dmtsai <== 目前用户所在的工作目录 (利用 pwd 取出! )
LANG=zh_TW.UTF-8 <== 这个与语系有关,底下会再介绍!
HOME=/home/dmtsai <== 这个用户的家目录啊!
LOGNAME=dmtsai <== 登入者用来登入的账号名称
_=/usr/bin/env <== 上一次使用的指令的最后一个参数(或指令本身)
export: 自定义变量转成环境变量
环境变量与自定义变量的差异在于该变量是否会被子程序所继续引用
[dmtsai@study ~]$ export #显示当前环境变量
[dmtsai@study ~]$ export 变量名称 #自定义变量转成环境变量
语系变量 (locale)
影响显示结果/etc/locale.conf
变量键盘读取、数组与宣告: read, array, declare
通配符与特殊符号
、
数据流重导向
数据流导向
- 标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
2. 标准输出 (stdout):代码为 1 ,使用 > 或 >> ;
3. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;1> :以覆盖的方法将『正确的数据』输出到指定的文件或装置上;
1>>:以累加的方法将『正确的数据』输出到指定的文件或装置上;
2> :以覆盖的方法将『错误的数据』输出到指定的文件或装置上;
2>>:以累加的方法将『错误的数据』输出到指定的文件或装置上;
判断
cmd ; cmd (不考虑指令相关性的连续指令下达)
管道命令(pipe)
[dmtsai@study ~]$ grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a : 将 binary 文件以 text 文件的方式搜寻数据
-c : 计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n : 顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
范例一: 将 last 当中,有出现 root 的那一行就取出来;
[dmtsai@study ~]$ last | grep 'root'
范例二:与范例一相反,只要没有 root 的就取出!
[dmtsai@study ~]$ last | grep -v 'root'
范例三:在 last 的输出讯息中,只要有 root 就取出,并且仅取第一栏
[dmtsai@study ~]$ last | grep 'root' |cut -d ' ' -f1
# 在取出 root 之后,利用上个指令 cut 的处理,就能够仅取得第一栏啰!
范例四:取出 /etc/man_db.conf 内含 MANPATH 的那几行
[dmtsai@study ~]$ grep --color=auto 'MANPATH' /etc/man_db.conf
....(前面省略)....
MANPATH_MAP /usr/games /usr/share/man
MANPATH_MAP /opt/bin /opt/man
MANPATH_MAP /opt/sbin /opt/man
# 神奇的是,如果加上 --color=auto 的选项,找到的关键词部分会用特殊颜色显示喔!
CentOS 7 当中,预设的 grep已经主动加上 —color=auto 在 alias 内