Unix系统中有不同的shell家族,而在Linux中接触到的只是其中的一部分,通过对Unix家族的了解,有助于对操作系统来龙去脉有个了解。
了解技术渊源,或许能激发有趣和有价值的想法。或者给出一种感觉,原来这样啊。 了解历史可以明白'为什么会如此'的习惯。
SHELL家族
01.查看系统安装了哪些shell
cat /etc/shells
02.查看当前shell
echo $SHELL
或者
ls -al /bin/sh
03.查看变量
env env | less
printenv
set
同时出现在set和env的变量既是环境变量也是shell变量
04.Shell历史
Bourne shell家族
bash sh ksh
Mashey shell
Thompson shell
Korn Shell -> ksh
Bourn Shell -> sh
FreeBSD shell -> sh
Z shell -> zsh
bash Linux默认的shell Bourne-again shell
特性:shell变量和环境变量都采用大写
希望某个变量为环境变量的时候 需要使用export
销毁变量 unset
shell选项设置
命令提示符 root # 简单提示符 $
C-Shell家族
C-shell 适用于编写C语言
Tcsh
特性--环境变量采用大写,shell变量采用小写
环境变量通过setenv创建 shell变量有set创建
命令提示符 root # 简单提示符 %或者使用大于号提示 >
05.临时和永久改变shell方法,目前使用默认的shell
临时切换
切换默认
Dash Shell 比 Bash Shell 小的多,符合POSIX标准。
Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,
它主要是为了执行脚本而出现,而不是交互,它速度更快
dash(theDebian Almquist Shell)
shell命令
01.元字符 引用 和转义
使用一对双引号,保留 $ ` \ 三个符号的特殊含义 $ 参数替换 ` 命令替换
使用一对单引号--strong quote
转义\ 所有的都是用转义字符,可读性差
例如:
##含有特殊变量的文本替换成对应的日期
sed 's/$example_version_yesterday/'$example_version_yesterday'/g' /opt/coderevariable.txt
sed "s/\$example_version_yesterday/$example_version_yesterday/g" /opt/coderevariable.txt
特殊字符
\w
02.Shell搜索路径
内部命令和外部命令 type 区分
type time 内部
man builtin | grep time 查看说明
help time
help -s time 查看使用语法
type date 外部
查看外部搜索路径 echo $PATH
/usr/local/sbin: /usr/local/bin:
/sbin: /bin:
/usr/sbin: /usr/bin:
/root/bin
03.Shell命令
history
重用,而不是重新键入,调取历史命令,对命令进行修改,然后执行
临时修改history的大小 set savelist=100
永久修改 - export HISTSIZT=100
fc -l fix command 修复命令
fc -s pattern=replacement number
使用rm之前先ls 列举文件,然后使用修复命令 fc -c ls=rm
自动补全 completion
tab 键一次
tab 键两次
别名
alias
临时挂起别名 \ls
unlias
04.SHELL命令
初始化文件
登陆文件 .bash_profile 或者 .bash_login
环境文件 .bashrc
.profile
注销文件
.bash_logout
点文件 --隐藏文件,通常被程序默默使用的配置文件
附录-参考