您的位置:首页 > 运维架构 > Shell

SHELL的简介

2017-02-24 11:43 169 查看

1、什么是shell?

命令解释器
也是一种程序设计语言


2、查看当前系统中支持哪些shell?

[root@shell ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh


3、查看当前shell

[root@shell ~]# echo $SHELL
/bin/bash


一般情况下:
linux系统默认使用的是/bin/bash
unix系统默认使用的是/bin/ksh


4、如何改变shell?

1)临时切换
直接在命令行敲命令


[root@shell ~]# yum install ksh -y
[root@shell ~]# ksh     //切换的ksh
# ls
anaconda-ks.cfg  Downloads       Music     Templates
Desktop      install.log         Pictures  Videos
Documents    install.log.syslog  Public
# exit          //退出


2)永久切换
a、root可以直接修改/etc/passwd文件的最后一个字段,重启生效
b、使用命令修改   chsh    ---  change shell
<1>对于root用户,可以修改任何人的shell,并且不需要密码


[root@shell ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@shell ~]# chsh -s /bin/ksh
Changing shell for root.
Shell changed.
[root@shell ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/ksh
operator:x:11:0:operator:/root:/sbin/nologin
[root@shell ~]# useradd uplooking
[root@shell ~]# tail -1 /etc/passwd
uplooking:x:504:504::/home/uplooking:/bin/bash
[root@shell ~]# chsh -s /bin/ksh uplooking
Changing shell for uplooking.
Shell changed.
[root@shell ~]# tail -1 /etc/passwd
uplooking:x:504:504::/home/uplooking:/bin/ksh
[root@shell ~]# su - uplooking
$ exit


3)对于普通用户,只能修改自己的,并且需要当前密码


[root@shell ~]# echo up | passwd --stdin uplooking
Changing password for user uplooking.
passwd: all authentication tokens updated successfully.
[root@shell ~]# su - uplooking
$ chsh -s /bin/bash
Changing shell for uplooking.
Password: up     //需要当前密码
Shell changed.
$ grep up /etc/passwd
uplooking:x:504:504::/home/uplooking:/bin/bash


5、什么是环境?

对于计算机或者进程来说,环境就是指你使用的变量、打开的文件、使用的函数、当前路径、资源限制等等


6、用户如何营造自己的环境?

与用户登录相关的文件决定了用户的环境。
1)/etc/profile
2)/etc/bashrc
3)~username/.bashrc
4)~username/.bash_profile
5)/etc/profile.d/*.sh
重点:PATH变量
查看PATH变量:


[root@shell ~]# echo $PATH
/usr/lib64/qt3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin


功能:命令的搜索路径,决定了不同用户能够直接执行的命令不同


7、登录shell和非登录shell

登录shell:能够登录系统的             /bin/*sh


[root@shell ~]# ls /bin/*sh
/bin/bash  /bin/csh  /bin/dash  /bin/ksh  /bin/sh  /bin/tcsh


非登录shell:不能够登录系统的     /sbin/nologin


8、完全登录shell和非完全登录shell

完全登录shell:用户拥有自己的环境,也就是读取了所有的环境变量配置文件
1)su - username
2)在登录界面输入账号和密码的登录
非完全登录shell:用户没有读取全部的环境变量配置文件,使用了一部分别人的环境
su username


9、shell命令的分类

-- 查看文件类型
[root@shell ~]# file /etc/passwd
/etc/passwd: ASCII text
-- 查看命令的类型  type
1)内部命令   —— shell自带的
如何查看系统中有多少内部命令?
[root@shell ~]# help | wc -l
46
[root@shell ~]# type unalias
unalias is a shell builtin
2)外部命令  —— 一般是软件安装的
[root@shell ~]# type whoami
whoami is /usr/bin/whoami
[root@shell ~]# type hostname
hostname is /bin/hostname
3)别名
[root@shell ~]# type ls
ls is aliased to `ls --color=auto'
设置别名:alias
取消别名:unalias

4)函数     function(功能、函数)  很少在命令行使用,一般在脚本中使用
[root@shell ~]# hello() { echo douniwan;echo douwowan; }
定义函数:
函数名(参数)
{
函数体;
}
注意:参数可有可无;函数体为该函数具体功能实现的代码可以有多条

[root@shell ~]# type hello
hello is a function
hello ()
{
echo douniwan;
echo douwowan
}
[root@shell ~]# hello    //调用函数,通过函数名
douniwan
douwowan
[root@shell ~]# unset hello   //取消函数
[root@shell ~]# type hello
bash: type: hello: not found

5)shell的关键字
[root@shell ~]# type if
if is a shell keyword

6)hash的命令  在内存中的,执行速度快
[root@shell ~]# type ifconfig
ifconfig is /sbin/ifconfig
[root@shell ~]# ifconfig
[root@shell ~]# type ifconfig
ifconfig is hashed (/sbin/ifconfig)
查看已经缓存的命令及命中次数
[root@shell ~]# hash
如何清除命令的缓存?
清除某一条的缓存
[root@shell ~]# hash -d chsh
[root@shell ~]# hash | grep chsh
清除全部缓存
[root@shell ~]# hash -r
[root@shell ~]# hash
hash: hash table empty


本节初步对于shell有个介绍,后续将会对shell使用作进一步详细说明。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell